Node boilerplate for create CRUDs and restful API's with Express Framework and Sequelize ORM written in Typescript.
$ npm i
$ npm i -g pm2
Copy .env.example
to .env
and set environments
- PostgresSQL
$ npm install --save pg pg-hstore
- MySQL
$ npm install --save mysql2
- MariaDB
$ npm install --save mariadb
- SQLite
$ npm install --save sqlite3
- SQL Server
$ npm install --save tedious
Setting config database connection on config file: config/database.js
*if you will not use migrations or seeds this config can be created with ".ts" extension
more config details
- For implements migrations or seeds install sequelize-cli module:
$ npm i -g sequelize-cli
-
Create
database/seeders
and/ordatabase/migrations
folder OBS: You can create seeds or migrations folders individually -
Create a
.sequeilizerc
and paste follow code:
module.exports = {
"config": "./config/database.js", //database config file reference
"seeders-path": "./database/seeders", //remove if you don't use seeders
"migrations-path": "./database/migrations" //remove if you don't use migrations
};
$ sequelize migration:create --name MIGRATION_NAME
$ sequelize db:migrate
$ sequelize seed:create --name SEED_NAME
$ sequelize db:seed:all
- For implements Schedules install node-schedule module:
$ npm i node-schedule --save
$ npm i @types/node-schedule --save-dev
-
Create
src/jobs
folder and view example of job file. -
Create
src/schedule.ts
file ande paste follow code or copy from example
/* src/schedule.ts */
import { resolve } from "path";
import { scheduleJob } from "node-schedule";
import * as fs from "fs";
import { Job } from "./common/interfaces/job";
const env = process.env.NODE_ENV || "development";
const prefix = env == "development" ? "" : "build/";
export default class Schedule {
public jobs: Job[] = [];
public constructor() {
this.getJobs();
}
public getJobs = (): void => {
const path = resolve(`${prefix}src/jobs`);
let files = fs.readdirSync(path);
this.jobs = files.map((file): Job => require(`./jobs/${file}`).default);
};
public startJobs = (): void => {
this.jobs.map(
(job: Job): void => {
if (job.enabled)
scheduleJob(job.date, async (): Promise<void> => await job.execute());
}
);
};
}
- Import
src/schedule.ts
on app and call startJobs() method on App constructor
$ npm run dev
$ npm run build:dev
$ npm run build