npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

express-typeorm-rest-boilerplate

v0.4.3

Published

Boilerplate code to get started with building RESTful API Services

Downloads

190

Readme

Why?

The main reason I decided to start this project is to provide a boilerplate for the NodeJS, Express, Typescript, TypeORM, MongoDB stack. Also with TypeORM, this boilerplate code can easily be modified to use MySQL, PostGreSQL, and many more. Tedious setting up of project structure, logging, testing, env and eslint is all done for you! Now you can focus on actually implementing the core functionalities and not spending hours setting up and configuring your project.

Try it out and feel free to raise any issues or create pull requests if you would like to contribute!

Features

  • JWT based user authentication with jsonwebtoken and express-jwt.
  • Dependency Injection with TypeDI.
  • ORM with support for many databases (MySQL, PostgreSQL, MariaDB, SQLite, MongoDB, and more) with TypeORM.
  • Clear and organised structure with different layers such as entities, services, middlewares, loaders, etc.
  • Validation thanks to class-validator.
  • Unit and Integration Testing with Jest.
  • Security Features with Helmet.
  • Role-based access control using a custom-built middleware.
  • Simple Data Seeding with custom-built factories and Faker.js.
  • Code generator for entity, service, route, factory, seed, test with a custom-built generator script and CLI tool Commander.

Getting Started

Step 1: Set up the Development Environment

Install Node.js and NPM

Install a MongoDB server or use MongoDB Atlas

Step 2: Create a new project

Fork or download this project and modify package.json for your new project.

Make a copy of the .env.example file and rename it to .env.

Create a new database and add the connection string in the .env file.

Install the required packages.

npm install

This installs all the dependencies with NPM.

Now your development environment should be ready to use!

Step 3: Serve your application

Go to the root directory and start your app with this npm script.

npm run dev

This starts a local server using nodemon and ts-node. The server base endpoint will be http://127.0.0.1:3000 where 3000 is the PORT variable you set in the .env file.

Scripts and Tasks

Install

  • Install all dependencies with npm install

Linting

  • Run code syntax and format checking using npm run lint which runs eslint.
  • Automatically fix lint errors with npm run lint:fix.

Running MongoDB locally

For this step you need to install MongoDB Server

  • Run npm run mongodb to start a local MongoDB server with it's data stored in .mongodb in the root directory.
  • This is very useful for unit / integration testing.
  • It's always a good idea to use a separate database for testing.

Tests

  • Run unit tests using npm run test (for Windows users) or npm run test:unix (for Mac and Linux users).

Running the app in development

  • Run npm run dev to start nodemon with ts-node.
  • The server base endpoint will be http://127.0.0.1:3000 where 3000 is the PORT variable you set in the .env file.

Building and running the app in production

  • Run npm run build to compile all the Typescript sources and generate JavaScript files.
  • To start the built app located in build use npm start.

API Routes

The route prefix is /api by default, but you can change this in the .env file.

| Route | Description | | ----------------------- | -------------------------------------------------------- | | /api | Base endpoint | | /api/auth/login | Auth - login endpoint | | /api/auth/register | Auth - register endpoint | | /api/user | Example entity endpoint - returns all users | | /api/user/current | Example entity endpoint - returns current logged in user | | /api/company | Example entity endpoint - returns all companies | | /api/company/:id | Example entity endpoint - returns a company by id | | /api/jobApplication | Example entity endpoint - returns all job applications | | ... | ... |

Project Structure

| Name | Description | | -------------------------- | ------------------------------------------------------------ | | .mongodb/ | Local MongoDB server data | | build/ | Compiled source files will be placed here | | commands/ | Custom CLI command tools used with npm scripts | | src/ | Source files | | src/api/middlewares/ | Custom middlewares | | src/api/entities/ | TypeORM Entities (Database models) | | src/api/services/ | Service layer | | src/config/ | The configuration file which loads env variables | | src/database/factories | Factories generate entities with mock data | | src/database/seeds | Seeds use factories to save mock data in the database | | src/loaders/ | Loader is where the app is configured and database is loaded | | src/types/ *.d.ts | Custom type definitions | | test *.spec.ts | Unit and integration tests | | .env.example | Environment configurations |

Logging

For logging we use winston.

License

MIT