ahmetuysal / Nest Hackathon Starter
Programming Languages
Projects that are alternatives of or similar to Nest Hackathon Starter
Nest Hackathon Starter
This project contains boilerplate for creating APIs using Nest, a progressive Node.js framework for building efficient and scalable server-side applications.
It is mostly built to be used as a starting point in hackathons and implements common operations such as sign up, JWT authentication, mail validation, model validation and database access.
You can also look at my Angular Hackathon Starter template that shares the same contract with this API.
Features
-
PostgreSQL with TypeORM
-
JWT Authentication
-
Mail Verification
-
Mail Change
-
Password Reset
-
Request Validation
-
Customizable Mail Templates
-
Swagger API Documentation
-
Security Techniques
-
Logger
Getting Started
Installation
- Make sure that you have Node.js(>= 8.9.0) installed.
- Clone this repository by running
git clone https://github.com/ahmetuysal/nest-hackathon-starter.git <YOUR_PROJECT_NAME>
or directly create your own GitHub repository using this template. - Move to the appropriate directory:
cd <YOUR_PROJECT_NAME>
. - Run
yarn
to install dependencies.
Configuration Files
TypeORM Configurations
This template uses Postgres by default. If you want to use another database, follow instructions in the official Nest documentation and use appropriate column types for your entities.
If you wish to use another database you will also have to edit ormconfig.js
file accordingly.
Template includes three different environment options by default. Most of the time you will use the local
environment when developing and production
environment on production. You will need to fill out corresponding
environment files in env
directory.
DATABASE_HOST=__YOUR_DATABASE_URL__
DATABASE_PORT=5432
DATABASE_USERNAME=__YOUR_USERNAME__
DATABASE_PASSWORD=__YOUR_PASSWORD__
DATABASE_NAME=__YOUR_DATABASE__
JWT Configurations
A secret key is needed in encryption process. Generate a secret key using a service like randomkeygen.
Enter your secret key to config.ts
file. You can also the change expiration time, default is 86400 seconds(1 day).
jwt: {
secretOrKey: '__JWT_SECRET_KEY__',
expiresIn: 86400,
},
NodeMailer✉️ Configurations
A delivery provider is required for sending mails with Nodemailer. I mostly use SendGrid to send mails, however, Nodemailer can work with any service with SMTP transport.
To get a SendGrid API key:
- Create a free account from https://signup.sendgrid.com/
- Confirm your account via the activation email and login.
- Create an API Key with mail sending capability.
Enter your API key and sender credentials to config.ts
file. Sender credentials are the sender name and sender mail that will be seen by your users.
mail:
service: {
host: 'smtp.sendgrid.net',
port: 587,
secure: false,
user: 'apikey',
pass: '__SENDGRID_API_KEY__',
},
senderCredentials: {
name: '__SENDER_NAME__',
email: '__SENDER_EMAIL__',
},
},
Mail Template Configurations
Mail templates are highly customizable and heavily depend on configurations. Enter your project's information to config.ts
. Urls are used as references in the templates. If your mail verification logic is independent from your front-end application, you can use API's own mail verification endpoint, e.g. http://localhost:3000/auth/verify
, as mailVerificationUrl
. Otherwise, send a HTTP GET
request to verification endpoint with token added as a parameter named token, e.g, http://localhost:3000/auth/verify?token=__VERIFICATION_TOKEN__
project: {
name: '__YOUR_PROJECT_NAME__',
address: '__YOUR_PROJECT_ADDRESS__',
logoUrl: 'https://__YOUR_PROJECT_LOGO_URL__',
slogan: 'Made with ❤️ in Istanbul',
color: '#123456',
// You can enter as many social links as you want
socials: [
['GitHub', '__Project_GitHub_URL__'],
['__Social_Media_1__', '__Social_Media_1_URL__'],
['__Social_Media_2__', '__Social_Media_2_URL__'],
],
url: 'http://localhost:4200',
mailVerificationUrl: 'http://localhost:3000/auth/verify',
mailChangeUrl: 'http://localhost:3000/auth/change-email',
resetPasswordUrl: 'http://localhost:4200/reset-password',
termsOfServiceUrl: 'http://localhost:4200/legal/terms',
},
Migrations
By default this template disables synchronize in favor of migrations.
If you wish to enable synchronize you can edit ormconfig.js
file.
# generate migration for local environment
$ yarn migrations:generate:local
# run migrations in local environment
$ yarn migrations:run:local
# revert latest run migration in local environment
$ yarn migrations:revert:local
# generate migration for production environment
$ yarn migrations:generate:production
# run migrations in production environment
$ yarn migrations:generate:production
# revert latest run migration in production environment
$ yarn migrations:generate:local
Running the app
$ nest start
Running the tests
# unit tests
$ yarn run test
# e2e tests
$ yarn run test:e2e
# test coverage
$ yarn run test:cov
Support Nest
Nest is an MIT-licensed open source project. If you'd like to join support Nest, please read more here.
License
Licenced under MIT License. Nest is also MIT licensed.