首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NestJs/Mongoose中的自动增量序列

NestJs/Mongoose中的自动增量序列
EN

Stack Overflow用户
提问于 2020-07-10 05:53:14
回答 1查看 3K关注 0票数 4

我正在将一个NodeJs项目迁移到NestJs,这个项目使用MongoDB作为后端数据库,Mongoose作为ODM。我使用mongoose-sequence插件来处理自动增量序列,但是我遇到了在NestJs下需要这个库的问题。

mongoose-sequence文档解释了如何使用CommonJS语法导入库,如下所示:

代码语言:javascript
复制
const mongoose = require('mongoose')
const AutoIncrementFactory = require('mongoose-sequence');

const connection = await mongoose.createConnection('mongodb://...');

const AutoIncrement = AutoIncrementFactory(connection);

使用ES6导入语法,应该是这样的:

代码语言:javascript
复制
import * as mongoose from 'mongoose';
import * as AutoIncrementFactory from 'mongoose-sequence';

const connection = ...;

const AutoIncrement = AutoIncrementFactory(connection);

然而,由于NestJs使用依赖注入,访问本机连接就不那么直接了。根据documentation to integrate MongoDB using Mongoose,可以使用@InjectConnection()装饰器访问本地Mongoose连接对象,如下所示:

代码语言:javascript
复制
@Injectable()
export class CatsService {
  constructor(@InjectConnection() private connection: Connection) {}
}

但是由于TypeScript decorators只能附加到类声明、方法、访问器、属性或参数,所以我不知道如何注入连接、请求插件并在我的Schema类上初始化它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 12:36:21

可以使用MongooseModuleforFeatureAsync()方法和工厂提供程序(即useFactory)为给定的模式注册插件。

遵循official documentation中的示例

代码语言:javascript
复制
@Module({
  imports: [
    MongooseModule.forFeatureAsync([
      {
        name: Cat.name,
        useFactory: () => {
          const schema = CatsSchema;
          schema.plugin(require('mongoose-autopopulate'));
          return schema;
        },
      },
    ]),
  ],
})
export class AppModule {}

但是,对于mongoose-sequence插件,需要将本机Mongoose连接对象传递给插件初始化。这可以通过使用getConnectionToken方法将连接注入到工厂提供程序中来实现:

代码语言:javascript
复制
import {getConnectionToken, MongooseModule} from '@nestjs/mongoose';
import * as AutoIncrementFactory from 'mongoose-sequence';

@Module({
  imports: [
    MongooseModule.forFeatureAsync([
      {
        name: Cat.name,
        useFactory: async (connection: Connection) => {
          const schema = CatsSchema;
          const AutoIncrement = AutoIncrementFactory(connection);
          schema.plugin(AutoIncrement, {inc_field: 'id'});
          return schema;
        },
        inject: [getConnectionToken('YOUR_CONNECTION_NAME')],
      },
    ]),
  ],
})
export class AppModule {}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62824276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档