This is only my opinion of course, but if Flask is a micro-framework, Express feels like a micro-micro-framework. The docs strike me as sparse, and it is sometimes difficult to get through all the Hello World noise in search results and figure out what even is a standard structure for Node/Express APIs.
This project was borne out of a desire to give myself a standard boilerplate setup including tests and dependencies that I could use in the future to avoid repeating my work around figuring out a reasonable application structure.
This post specifically deals with basic account creation and seed data for MongoDB, so if you know that already or aren't trying to recreate the app on your own, feel free to skip ahead to part II.
MongoDB Atlas is a cloud hosting and management platform that provides a GUI to work with data in a cloud hosted mongo instance, and we will use it throughout this post. It's a great tool, and I prefer it heavily over some others I've seen, such as the interface for AWS DynamoDB.
Our objectives here are as follows: We are going to create a new organization > project > cluster > database, and affiliated collections two times: one to represent a production database, and the second time to represent a test database. The test database will be used later on when we demo the integration tests that are a part of my project skeleton.
We will also create a user, give them access, and get connection strings to our two databases that will be used for our running Node app.
The data we are going to use is inspired by a set of adorable pokemon icons. It is a simple api that returns an icon image string and pokemon name.
And lastly, there is a starter repo that will be used throughout this tutorial and the following tutorials which you can clone here.
With that said, let's get started!
First, you are going to need to make a MongoDB Atlas account here.
You will be prompted to create a user and account. Feel free to change the names if you plan on customizing the project boilerplate, but if you want to see the full app running you will either need to keep mine, or update the name references in following steps.
We will need to create a cluster, where our databases will live, and you'll need to be sure to elect the free/shared option to avoid charges. (One nice thing about MongoDB Atlas is that the free options are flexible enough that you can have multiple free database instances on the shared tier if you are careful about how you structure your work.)
Use the default cluster options when given the opportunity.
From the cluster overview page, we are going to click the
COLLECTIONS button, then select
add collection, which also will prompt us to create our first database.
We will then choose the "Add your own data" option to get started with collections.
Our sample API is going to have two main endpoints: /pokemon, and /equipment. Some of the icons are pokeballs, potions, etc and others are actual pokemon. So we are going to add another collection under our database called
We will then use the
INSERT DOCUMENT option on each of our new collections to create some seed data. (You can find seed data in the cloned repo under
We are now going to repeat the last couple steps to create an identical test database, with its own pokemon and equipment collections.
We are now going to navigate up one level, and then hit
Here you should be prompted to create a user, and select whitelisted IP addresses for incoming traffic to our database. We are going to use CIDR notation to allow any IP address to access this database by whitelisting
We are also going to create an authenticated user.
We are then going to select the
Connect Application option, which will give us a URI string that can link our node app with our mongo data.
Copy the URI because it will be needed shortly.
Last but not least, we are going to create a
.env file in the cloned repo with our project boilerplate. It will need to be set up as follows:
With and subbed in with your own credentials.
With those steps taken care of, you will have created a user, project, cluster, and prod and test database instances for use in the following walkthrough.
In Part II, we will get more into the project structure and functionality, so stay tuned!