Nest.js crud module for mongoose models without @nestjsx/crud
Nest.js + Typegoose 中文视频教程请移步哔哩哔哩: 全栈之巅
-
Install and setup nestjs-typegoose or nestjs-mongoose
-
Install
yarn add nestjs-mongoose-crud # or npm i nestjs-mongoose-crud
-
Import model to module:
import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { TypegooseModule } from 'nestjs-typegoose'; import { User } from './user.model'; @Module({ imports: [ TypegooseModule.forFeature([User]) ], controllers: [UsersController] }) export class UsersModule {}
-
Add
@Crud()
decorator and inject imported model tomodel
property.import { Controller } from '@nestjs/common'; import { Crud } from 'nestjs-mongoose-crud' import { User } from './user.model'; import { InjectModel } from 'nestjs-typegoose'; import { ModelType } from '@typegoose/typegoose/lib/types'; @Crud({ model: User }) @Controller('users') export class UsersController { constructor(@InjectModel(User) public model: ModelType<User>) {} }
-
Test your CRUD APIs: http://localhost:3000/users
e.g. @Crud()
for UsersController
METHOD | PATH | DESC |
---|---|---|
GET | /users | Get all users |
GET | /users/:id | Get a user |
POST | /users | Create a user |
PUT | /users/:id | update a user |
DELETE | /users/:id | Delete a user |
You can find all routes and DTOs by setup swagger
Use a JSON (in string) query
parameter to find records:
export interface PaginateKeys {
data?: string
total?: string
lastPage?: string
currentPage?: string
}
export interface CrudRoute {
decorators?: (MethodDecorator | PropertyDecorator)[]
}
export interface CrudRouteWithDto extends CrudRoute {
dto?: any
transform?: (data: any) => any
}
export interface CrudRouteForFind extends CrudRoute {
paginate?: PaginateKeys | false
limit?: number
populate?: string | any
sort?: string | any
where?: any
}
export interface CrudRouteForFindOne extends CrudRoute {
populate?: string | any
where?: any
select?: any
}
export interface CrudRoutes {
find?: CrudRouteForFind | false,
findOne?: CrudRouteForFindOne | false,
create?: CrudRouteWithDto | false,
update?: CrudRouteWithDto | false,
delete?: CrudRoute | false,
}
export interface CrudOptions {
routes?: CrudRoutes
}
export interface CrudOptionsWithModel extends CrudOptions {
model: any
}