NodeJS-API-Boilerplate
Always in progress 👷
Get Started
- Installation
- Install Mongodb
- Raven Log
- Body Whitelist
- Api Doc
- Pre-Commit Hook
- Scripts
- Dev-Debug
- Why toJSON() on methods model
- For validation on request
- Seeds
- Docker
- Techs
- Todo
Build
This Boilerplate use webpack 3 to compile code.
Installation
- Clone the project
git clone https://github.com/EQuimper/nodejs-api-boilerplate.git
. - Install dependencies
yarn install
ornpm i
- Create a
.env
file in the root like the.env.example
file. - For dev you need to have mongodb db locally. How to?
Install Mongodb
With Homebrew you can just run brew install mongodb
and after brew services start mongodb
.
Raven Log
For get raven log create account here: Sentry
Body Whitelist
For security have add a whitelist function for your req.body
coming from the front end. You can take a look of it in the contants.js
file.
const WHITELIST = {
posts: {
create: ['title', 'text'],
update: ['title', 'text'],
},
users: {
create: ['email', 'username', 'password'],
},
};
Api Doc
Api doc his hosted on surge. Link. For change the url and have your own docs just add you link in the .env
file.
Pre-Commit Hook
I've add pre-commit
and lint-staged
for lint your code before commit. That can maybe take time
Scripts
DEV
yarn dev
or
npm run dev
PS That can crash if this is the first time but don't worry give it 2 sec the scripts gonna work. He just need to created a dist folder :) This way you have only one command to run.
DEV-DEBUG
yarn dev:debug
or
npm run dev:debug
Why toJSON on methods model ?
toJSON()
help us to get only the data we want when we push the info to the client. So now we just need to put the user object in the res.json(user)
and we received only what we want. Why toAuthJSON()
? Cause if we populated the post we get the toJSON()
so the toAuthJSON()
is the on to call on signup and login for get the token and _id.
toAuthJSON() {
return {
_id: this._id,
token: `JWT ${this.createToken()}`,
};
},
toJSON() {
return {
_id: this._id,
username: this.username,
};
},
For Validation on Request
I'm using Joi in this boilerplate, that make the validation really easy.
export const validation = {
create: {
body: {
email: Joi.string().email().required(),
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required(),
username: Joi.string().min(3).max(20).required(),
},
},
};
routes.post(
'/signup',
validate(UserController.validation.create),
UserController.create,
);
Seeds
For seed just run one of this following comand. This is helpful in dev for making fake user.
This is only available in dev environment
You can change the number of seed by changing the number in each script inside /scripts/seeds
- Seeds 10 user
yarn db:seeds-user
- Clear user collection
yarn db:seeds-clear-user
- Clear all collection
yarn db:seeds-clear
Monitoring Server on http://localhost:3000/status
Docker
bash scripts/development.sh
Techs
- Helmet
- Cors
- Body-Parser
- Morgan
- PassportJS
- Passport-Local
- Passport-JWT
- Raven
- Joi
- Http-Status
- Lint-Staged
- Husky
- Prettier
- Eslint Config EQuimper
- Eslint Config Prettier
- CodeClimate
- Coveralls
- Travis Ci
- Circle Ci
- Greenkeeper
- Istanbul
- Mocha
- Chai
- Supertest
- NPS
- MongoDB
- Mongoose
- Webpack3
Todo
- Test seeds controller - Done by cpenarrieta
- Sendgrid or Other Mail supply
- Add S3 for user image
- Change Mocha for Jest
PR are welcome!!! 😃
Contributors
Thanks goes to these wonderful people (emoji key):
Emanuel Quimper 💬 📝 🐛 💻 📖 💡 🚇 🔌 👀 |
Cristian Penarrieta |
---|
This project follows the all-contributors specification. Contributions of any kind welcome!