Skip to content
A starter project for Node.js with Express and Postgres running on Docker Compose
Branch: master
Clone or download
Latest commit e4aa6df Apr 23, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin run xo --fix Apr 23, 2019
src initial commit Apr 14, 2019
.dockerignore initial commit Apr 14, 2019
.editorconfig initial commit Apr 14, 2019
.gitignore initial commit Apr 14, 2019
Dockerfile initial commit Apr 14, 2019
LICENSE initial commit Apr 14, 2019
README.md initial commit Apr 14, 2019
config.js initial commit Apr 14, 2019
docker-compose.yaml initial commit Apr 14, 2019
package-lock.json add migrate dependency Apr 23, 2019
package.json add migrate dependency Apr 23, 2019
server.js run xo --fix Apr 23, 2019

README.md

Express Postgres Starter

A starter project for Node.js with Express and Postgres

Setup

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/db

The 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).

Express API setup

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/api folder
  • Domain is dealt with in the ./src/modules folder. It's currently non-existent since we've only got generic user and session resources.
  • Data is dealt with in the ./src/persistence folder

Database setup + management

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 bash

Followed by:

npm run migrate up

Session/Authentication management

Session management is done through a custom sessions table, /api/session endpoints (see ./src/api/session.js) and leveraging client-sessions.

You can’t perform that action at this time.