📔
node-ts-architecture
  • Node TypeScript Architecture (WIP)
  • The thousand-foot view
  • The example app
  • Project structure
  • Writing a library
    • Entities
    • Operations
    • Errors
    • Events
    • Context
    • Library root
  • Creating adapters
    • How adapters work
  • Creating bindings
    • What are bindings?
  • Putting it all together
    • Assembling apps
  • Testing
  • Testing an NTA application
Powered by GitBook
On this page

Was this helpful?

The example app

PreviousThe thousand-foot viewNextProject structure

Last updated 4 years ago

Was this helpful?

This project and documentation are work in progress

To illustrate the concepts in this guide, I've written a simple Node application representing a community library app. You can view the code in .

This app allows users to register, borrow books and return them. It speaks to a PostgreSQL database and issues events over a RabbitMQ pub/sub queue. Database operations are wrapped in transactions and the whole app is Dockerised to be easily run locally. In other words, it implements everything you'd expect from a real world app short of a CI script and production configuration.

I've done this because I felt the alternative was far too academic: it's one thing to lecture readers on how they should do something, another to demonstrate exactly how to do that when real world complications get in the way.

To run the app locally, you'll need Docker and the Docker Compose CLI. Just run docker-compose up in the context of the repo and you'll boot up an app, a PostgreSQL and a RabbitMQ instance.

This app will be exposed on localhost:3000 and you can interact with it by using a HTTP dev client like . Useful paths include

  • GET localhost:3000/health - performs a healthcheck on the instance; if this doesn't return a 200 then something is going wrong with the containers

  • POST localhost:3000/user - creates a user; do a search in the code for UserInput to see the datastructure you'll need to post

  • POST localhost:3000/book - same, but for creating a book

  • POST localhost:3000/loan - creates a loan; search for LoanInput to see what data you need

  • POST localhost:3000/return/:bookId - returns a book

Check the results of your action by connecting to the database on port 5432 with credentials "username" / "password", e.g. psql 0.0.0.0 -p 5432 user=username pw=password database=db. You can also log in to the RabbitMQ management console at localhost:15672 with username / password as "guest".

this Github repository
Postman