Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ngduc/node-rem
Node REM - NodeJS Rest Express MongoDB and more: typescript, passport, JWT, socket.io, HTTPS, HTTP2, async/await, nodemailer, templates, pagination, docker, etc. Live Demo: https://node-rem-ngduc.vercel.app
https://github.com/ngduc/node-rem
boilerplate es2017 es6 express express-boilerplate microservices mongodb mongoose nodejs rest-api typescript
Last synced: 3 months ago
JSON representation
Node REM - NodeJS Rest Express MongoDB and more: typescript, passport, JWT, socket.io, HTTPS, HTTP2, async/await, nodemailer, templates, pagination, docker, etc. Live Demo: https://node-rem-ngduc.vercel.app
- Host: GitHub
- URL: https://github.com/ngduc/node-rem
- Owner: ngduc
- License: mit
- Created: 2018-09-26T07:01:21.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-06T17:28:25.000Z (over 1 year ago)
- Last Synced: 2024-07-19T02:15:50.581Z (4 months ago)
- Topics: boilerplate, es2017, es6, express, express-boilerplate, microservices, mongodb, mongoose, nodejs, rest-api, typescript
- Language: TypeScript
- Homepage:
- Size: 8.16 MB
- Stars: 242
- Watchers: 8
- Forks: 50
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Node REM
NodeJS Rest Express MongoDB (REM) - a production-ready lightweight backend setup.
[![Build Status](https://travis-ci.org/ngduc/node-rem.svg?branch=master)](https://travis-ci.org/ngduc/node-rem) [![Maintainability](https://api.codeclimate.com/v1/badges/11155b15b675ef311f72/maintainability)](https://codeclimate.com/github/ngduc/node-rem/maintainability)
[Live Demo](https://node-rem-ngduc.vercel.app/) (login with a test user: [email protected], user111 - inspect API calls to learn more)
🌟 It rains ~~cats and dogs~~ features:
```
Typescript Express CORS Helmet DotEnv joi (validation) forever
Mongoose Passport JWT Await
Tslint Apidoc Docker Husky Morgan Travis Unix/Mac/Win (Powershell)
Tests
Mocha Chai Sinon istanbul
MORE:
HTTPS HTTP2 (spdy) Socketio 2.1 Init DB Data
Slack message Nodemailer Mailgun Email Templates Forgot Password
VSCode Debug Dependabot Codacy File upload (multer)
API
API response (data, meta: limit, offset, sort) Transform res
apiJson Pagination query
Regex query Whitelist fields in response Populate deep fields
mstime API response time Stack trace in Response
UI Example
CRA, Typescript, React-router, Axios, PostCSS, Tailwind. Components: Login, Home, ItemView.
Portable-react
```
- More details in [Documentation / Features](src_docs/features.md)### 📦 Installation
Require: `MongoDB` and `NodeJS v8.12.0 +`
Clone this project:
```
git clone https://github.com/ngduc/node-rem.git your-app
cd your-app
rm -rf .git (remove this github repo's git settings)
yarn
```
- Update `package.json` and `.env` file with your information.
- Run `yarn dev`, it will create a new Mongo DB "node-rem"
- Verify `yarn test` can run all unit tests.
- Verify: use Postman to POST http://localhost:3009/api/v1/auth/register to create a new user. (set payload to have email, password)
```
curl -k -d '{"email": "[email protected]", "password": "testpsw"}' -H "Content-Type: application/json" -X POST http://localhost:3009/api/v1/auth/register
```### 🔧 Commands
```
- Start MongoDB first. Verify .env variables.yarn dev launch DEV mode
yarn start launch PROD mode
yarn stopyarn test Run tests (requires MongoDB)
```#### Frontend Example - uses this node-rem backend:
```
- First, start the Backend with: yarn dev- Then, start UI:
cd ./ui
yarn
yarn start (then open http://localhost:3000 - login with a test user: [email protected], user111)
```### 📖 Features
Your simple `API Route Handler` will have a nice syntax like this: (packed with ~~vitamins~~ cool stuffs)
```js
exports.list = async (req: Request, res: Response, next: NextFunction) => {
try {
const data = (await User.list(req)).transform(req); // query & run userSchema.transform() for response
apiJson({ req, res, data, model: User }); // return standard API Response
} catch (e) {
next(e);
}
};
```API Response is similar to [JSON API](http://jsonapi.org/examples/#pagination) standard:
```js
GET http://localhost:3009/api/v1/users?fields=id,email&email=*user1* (get id & email only in response)
GET http://localhost:3009/api/v1/users?page=1&perPage=20 (query & pagination)
GET http://localhost:3009/api/v1/users?limit=5&offset=0&sort=email:desc,createdAt
{
"meta": {
"limit": 5,
"offset": 0,
"sort": {
"email": -1,
"createdAt": 1
},
"totalCount": 4,
"timer": 3.85,
"timerAvg": 5.62
},
"data": [
{
"id": "5bad07cdc099dfbe49ef69d7",
"name": "John Doe",
"email": "[email protected]",
"role": "user",
"createdAt": "2018-09-27T16:39:41.498Z"
},
// more items...
]
}
```
Example of generated API Docs (using `apidoc`) - https://node-rem.netlify.com### 📖 Documentation
- [Documentation / Features](src_docs/features.md)
- [Build System](src_docs/build.md)
- [Dependencies Notes](src_docs/dependencies.md)
- [Change Log](CHANGELOG.md)### 🙌 Thanks
All contributions are welcome!
UI Example uses [Portable-react](https://github.com/ngduc/portable-react)