What started out as a simple code duplication removal, turned out into a major refactoring with complete rewriting of error handling, moving of business logic/db access into separate service files (about this in another blog post) and rewriting of all integration tests to use async/await. In this blog post I will focus on the custom error handling and how it made the code much cleaner for the REST API supporting www.bookmarks.dev. The API uses ExpressJS, currently in version 4.
It’s easy now to recognise the youtube video bookmarks on www.bookmarks.dev, by placing the youtube logo before the title of the bookmark:
Also, when you click on the youtube logo, a dialog will pop where the video is embedded and you can play it directly there. In this blog post I will show how it is implemented.
As a reminder, the www.bookmarks.dev website uses Angular, with angular material and bootstrap for styling.
Most applications depend on external factors that have different values depending on the environment where they are deployed. We mostly use for that environment variables. Guess what? Most of React Apps also have this need. In this blog posts presents a clean(er) way to make a multi-stage deployment of a Create React App on a Kubernetes Cluster. You can use this approach for a seamless integration into your continuous deployment pipeline.
In the beginning it will you show how to set up the React App and then guide you through several deployment possibilities on Kubernetes. You will deploy with
kubectl commands, with helm, with kustomize and in the end use skaffold.
The example app displays the latest public bookmarks published on www.bookmarks.dev. Depending on the environment the app is built for, it will display the environment name in the navigation bar and the header’s color is different.
The source code is available on Github
Create a config.js file where you inject the environment variables in the
window object (e.g. window.REACT_APP_API_URL=’https://www.bookmarks.dev/api/public/bookmarks’).
Add this file to the public folder of your react application. Dockerize the react application and at Kubernetes deployment time overwrite the config.js file in the
container - you can do that with Kubernetes configMaps via native kubectl commands, kustomize or helm.
Finding the desired link again can be sometimes a tedious job. It can even become frustrating when you don’t find it in a reasonable amount of time, because you know it’s there somewhere, you visited it before… After a struggle of about two or more minutes you finally find it.
This time you bookmark it and then you say to yourself - “from now on I will be more disciplined and consciously use bookmarks”.
bookmark (verb) - record the address of (a website, file, etc.) to enable quick access in future.
So far, so good. The problem is your bookmarks can turn into a monster themselves and you can later lose then more time browsing through them to find the right one, because you know now you bookmarked it…