A starter project for Node.js with Express and Postgres
Pre-requisites:
- Docker for Desktop
Run docker-compose up in the root of the project.
It will bring up Postgres and the Express application server in development mode.
It binds the application server to localhost:3000, this can be re-mapped this by changing the first 3000 in 3000:3000 of ./docker-compose.yaml).
Postgres is exposed on port 35432. The connection string is postgres://user:pass@localhost:35432/db (username, password and database name are defined in ./docker-compose.yaml).
You can connect to Postgres using the psql client:
psql postgres://user:pass@localhost:35432/dbThe default Docker CMD is npm start, ./docker-compose.yaml overrides this to npm run dev which runs the application using nodemon (auto-restart on file change).
The Express API is located in ./src/api.
Applications routes for resources are defined in ./src/api/index.js.
Global concerns like security, cookie parsing, body parsing and request logging are handled in ./server.js.
This application loosely follows the Presentation Domain Data Layering:
- Presentation is dealt with in the
./src/apifolder - Domain is dealt with in the
./src/modulesfolder. It's currently non-existent since we've only got generic user and session resources. - Data is dealt with in the
./src/persistencefolder
npm run migrate up will run the migrations.
npm run migrate down will roll back the migrations.
npm run migrate:create <migration-name> will create a new migration file in ./src/migrations.
To run the migrations inside of docker-compose. Which will run a bash instance inside the app container.
docker-compose run app bashFollowed by:
npm run migrate upSession management is done through a custom sessions table, /api/session endpoints (see ./src/api/session.js) and leveraging client-sessions.