继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Nest.js基础知识MongoDB

慕神8447489
关注TA
已关注
手记 1134
粉丝 172
获赞 955

請先安裝本次需要的模組。
cmd指令

yarn add mongoose yarn add @types/mongoose --dev

我们在 src/app/database.provider.ts实例化一个Mongoose

'use strict';import * as mongoose from 'mongoose';export const databaseProviders = [
    {        provide: 'MongoDBConnection',        useFactory: async (): Promise<mongoose.Connection> => {
            (mongoose as any).Promise = global.Promise;            return await mongoose.connect('mongodb://localhost:27017/IronManNest', {                useMongoClient: true
            })
        }
    }
]

先使用mongoose.connect()建立一下與MongoDB的連線,這會回傳MongooseThenable,再透過global.Promise 覆寫它,避免程式發出警告,實際上這也是一個非同步的Component。

使用Mongoose的人都知道我们要实例化一个schema对象
所以接下来我们必须定义一个schema对象src/app/User/schemas/user.schema.ts

import * as mongoose from 'mongoose';export const UsersSchema = new mongoose.Schema(
    {        Name: String,        Age: Number
    },
    { collection: 'Users', versionKey: false }, 
)

接下来是usersProviders
src/app/Users/users.providers.ts

'use strict';import { Connection, connection } from 'mongoose';import { UsersSchema } from './schemas/users.schema';export const UsersProvider = [
    {        provide: 'UsersRepository',        useFactory: (connection: Connection) => connection.model('Users', UsersSchema),        inject: ['MongoDBConnection']
    }
]

然后定义一下 Users的数据类型接口
src/app/Users/interfaces/IUsers.ts

'use strict';import { Document } from 'mongoose';export interface IUsers extends Document {
    readonly _id: number;
    readonly Name: string;
    readonly Age: number;
}

再来是定义@Body()的数据接口,让dot接口和interfaces中的字段进行映射
src/app/Users/DTO/createUses.dto.ts

import { ApiModelProperty } from '@nestjs/swagger';

export class CreateUsersDTO {    @ApiModelProperty()
    readonly _id: number;    @ApiModelProperty()
    readonly Name: string;    @ApiModelProperty()
    readonly Age: number;
}

接下来是要在UsersServices中依赖注入一下

'use strict';import { Component, Inject } from '@nestjs/common';import { IUsers, IUsersService } from './interfaces/index';import { Model } from 'mongoose';import { InjectRepository } from '@nestjs/typeorm';import { CreateUsersDTO } from './DTO/createUsers.dto';

@Component()export class UsersServices implements IUsersService{    constructor( @Inject('UsersRepository') private readonly usersRepository: Model<IUsers>) { }
}

@Inject('UsersRepository') 对应是是export const UsersProvider = [
{
provide: 'UsersRepository',
useFactory: (connection: Connection) => connection.model('Users', UsersSchema),
inject: ['MongoDBConnection']
}
]中的 UsersRepository

最后别忘了
在模块中已用一下 UsersServices ...UsersProvider

'use strict';import { Module } from '@nestjs/common';import { UsersServices } from '../users.service';import { UsersProvider } from '../users.providers';import { DatabaseModule } from '../../database.module';import { UsersController } from './users.controller';

@Module({    modules: [DatabaseModule],    controllers: [UsersController],    provides: [
        UsersServices,
        ...UsersProvider
    ]
})export class UsersModule { }

如果你觉得上面的方法比较复杂的话,还有第二中配置,这种配置是全局的。
app.moudule.ts 使用 @nestjs/mongoose

@Module({
  imports: [
    MongooseModule.forRoot('127.0.0.1:27017/nest'),
    MongooseModule.forFeature([
            { name: "User", schema: UserSchema },
    ])
    UploadModule,
    CmsModule
  ],
  controllers: [AppController],
  providers: [AppService],
})

对应的Server层

export class UsersServices implements IUsersService{
    constructor( @Inject('UsersRepository') private readonly usersRepository: Model<IUsers>) { }
}@Inject('User') 便可



作者:傻梦兽
链接:https://www.jianshu.com/p/7045542da01a


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP