https://github.com/tupizz/nestjs-mongo-elasticsearch
Nestjs project handling big size files with node stream and mongodb cursor. Exposing data through elasticsearch
https://github.com/tupizz/nestjs-mongo-elasticsearch
fastify mongoose nest nestjs typescript
Last synced: 2 months ago
JSON representation
Nestjs project handling big size files with node stream and mongodb cursor. Exposing data through elasticsearch
- Host: GitHub
- URL: https://github.com/tupizz/nestjs-mongo-elasticsearch
- Owner: tupizz
- License: mit
- Created: 2021-07-03T02:09:00.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-05T18:46:23.000Z (almost 4 years ago)
- Last Synced: 2025-02-09T14:47:23.287Z (4 months ago)
- Topics: fastify, mongoose, nest, nestjs, typescript
- Language: TypeScript
- Homepage:
- Size: 5.81 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.
### 📚 Description
This boilerplate is made to quickly prototype backend applications. It comes with database, logging, security, and authentication features out of the box.
---
### 🛠️ Prerequisites
#### Non Docker
- Please make sure to either have MongoDB Community installed locally or a subscription to Mongo on the cloud by configuration a cluster in [atlas](https://www.mongodb.com/cloud/atlas).
#### Docker 🐳
- Please make sure to have docker desktop setup on any preferred operating system to quickly compose the required dependencies. Then follow the docker procedure outlined below.
**Note**: Docker Desktop comes free on both Mac and Windows, but it only works with Windows 10 Pro. A workaround is to get [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) which will bypass the Windows 10 Pro prerequisite by executing in a VM.
---
### 🚀 Deployment
#### Manual Deployment without Docker
- Create a `.env` file using the `cp .env.example .env` command and replace the existing env variables with personal settings (MongoDB URL either `srv` or `localhost`)
- Modify the connection string by modifying the following [line](https://github.com/msanvarov/nest-rest-mongo-boilerplate/blob/master/.env.example#L10).- Download dependencies using `npm i` or `yarn`
- Start the app in pre-production mode using `npm run start` or `npm run start:dev` for development (the app will be exposed on the port 9000; not to conflict with React, Angular, or Vue)
#### Deploying with Docker 🐳
- Execute the following command in-app directory:
```bash
# creates and loads the docker container with required configuration
$ docker-compose up -d
```
- The following command will set up and run the docker project for quick use. Then the web application, and MongoDB will be exposed to http://localhost:9000 and http://localhost:27017 respectively.### 🔒 Environment Configuration
By default, the application comes with a config module that can read in every environment variable from the `.env` file.
**APP_ENV** - the application environment to execute as, either in development or production. Determines the type of logging options to utilize. Options: `dev` or `prod`.
**APP_URL** - the base URL for the application. Made mainly to showcase the power of `ConfigService` and can be removed as it doesn't serve any other purpose
**WEBTOKEN_SECRET_KEY** - the secret key to encrypt/decrypt web tokens with. Make sure to generate a random alphanumeric string for this.
**WEBTOKEN_EXPIRATION_TIME** - **the time in seconds** indicating when the web token will expire; by default, it's 2400 seconds which is 40 mins.
**DB_URL** - the URL to the MongoDB collection
---
### 🏗 Choosing a Web Framework
This boilerplate comes with [Fastify](https://github.com/fastify/fastify) out of the box as it offers [performance benefits](https://github.com/nestjs/nest/blob/master/benchmarks/all_output.txt) over Express. But this can be changed to use [Express](https://expressjs.com/) framework instead of Fastify.
For interchangeability:
- Replace the following lines of code in the [main.ts file](https://github.com/msanvarov/nest-rest-mongo-boilerplate/blob/master/src/main.ts) with the ones detailed below.
Fastify:
```ts
// for fastify:
import {
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import headers from 'fastify-helmet';
import fastifyRateLimiter from 'fastify-rate-limit';
const app = await NestFactory.create(
AppModule,
new FastifyAdapter({ logger: console }),
);
app.register(headers);
app.register(fastifyRateLimiter, {
max: 100,
timeWindow: '1 minute',
});
```Express:
```ts
// for express:
import headers from 'helmet';
import rateLimiter from 'express-rate-limit';
const app = await NestFactory.create(AppModule, {
logger: console,
});
app.use(headers());
app.use(
rateLimiter({
windowMs: 60, // 1 minutes
max: 100, // limit each IP to 100 requests per windowMs
}),
);
```**Note**: The boilerplate comes with production dependencies for both Express and Fastify to support moving between two. But this is going to leave it bloated especially when only **one web framework is used at a time**. Thus, **it is recommended that when deploying to production, unused dependencies are purged.**
If you choose to **use Fastify**, this command will **purge all of the Express dependencies**:
```bash
# removing Express dependencies
$ npm rm @nestjs/platform-express express-rate-limit helmet swagger-ui-express @types/express --save
```If you choose to **use Express**, this command will **purge all of the Fastify dependencies**:
```bash
# removing Fastify dependencies
$ npm rm @nestjs/platform-fastify fastify-helmet fastify-rate-limit fastify-swagger --save
```---
### ✅ Testing
#### Docker 🐳
```bash
# unit tests
$ docker exec -it nest yarn test# e2e tests
$ docker exec -it nest yarn test:e2e# test coverage
$ docker exec -it nest yarn test:cov
```#### Non-Docker
```bash
# unit tests
$ npm run test# e2e tests
$ npm run test:e2e# test coverage
$ npm run test:cov
```---
### 💡 TypeDocs
The documentation for this boilerplate can be found [on Github pages](https://msanvarov.github.io/nest-rest-mongo-boilerplate/).
The docs can be generated on-demand, simply, by typing `npm run typedocs`. This will produce a **docs** folder with the required front-end files and **start hosting on [localhost](http://localhost:8080)**.
```bash
# generate docs for code
$ npm run typedocs
```---
### 📝 Open API
Out of the box, the web app comes with Swagger; an [open api specification](https://swagger.io/specification/), that is used to describe RESTful APIs. Nest provides a [dedicated module to work with it](https://docs.nestjs.com/recipes/swagger).
The configuration for Swagger can be found at this [location](https://github.com/msanvarov/nest-rest-mongo-boilerplate/tree/master/src/swagger).
---
### ✨ Mongoose
Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box. Please view the [documentation](https://mongoosejs.com) for further details.
The configuration for Mongoose can be found in the [app module](https://github.com/msanvarov/nest-rest-mongo-boilerplate/blob/master/src/modules/app/app.module.ts#L17).
---
### 🔊 Logs
This boilerplate comes with an integrated Winston module for logging, the configurations for Winston can be found in the [app module](https://github.com/msanvarov/nest-rest-mongo-boilerplate/blob/master/src/modules/app/app.module.ts#L27).
---
### 👥 Support
Nest has been able to grown because of sponsors and support from backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
---
## License
Nest is [MIT licensed](LICENSE).
[Author](https://msanvarov.github.io/personal-portfolio/)