gpt4 book ai didi

node.js - NestJs/Mongoose 中的自动增量序列

转载 作者:行者123 更新时间:2023-12-03 12:17:58 27 4
gpt4 key购买 nike

我正在将 NodeJs 项目迁移到 NestJs,该项目使用 MongoDB 作为后端数据库,使用 Mongoose 作为 ODM。我使用的是 mongoose-sequence处理自动增量序列的插件,但是我遇到了需要 NestJs 下的库的麻烦。
mongoose-sequence 文档解释了如何使用 CommonJS 语法导入库,如下所示:

const mongoose = require('mongoose')
const AutoIncrementFactory = require('mongoose-sequence');

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

const AutoIncrement = AutoIncrementFactory(connection);
使用 ES6 导入语法它会是这样的:
import * as mongoose from 'mongoose';
import * as AutoIncrementFactory from 'mongoose-sequence';

const connection = ...;

const AutoIncrement = AutoIncrementFactory(connection);
然而,由于 NestJs 使用依赖注入(inject),访问 native 连接并不是那么直接。根据 documentation to integrate MongoDB using Mongoose可以使用 @InjectConnection() 访问 native Mongoose Connection 对象。装饰器如下:
@Injectable()
export class CatsService {
constructor(@InjectConnection() private connection: Connection) {}
}
但是自从 TypeScript decorators只能附加到类声明、方法、访问器、属性或参数我看不到如何注入(inject)连接、需要插件并在我的模式类上初始化它。

最佳答案

可以使用 forFeatureAsync() 为给定模式注册插件。 MongooseModule 的方法以及工厂供应商(即 useFactory )。
遵循 official documentation 中的示例:

@Module({
imports: [
MongooseModule.forFeatureAsync([
{
name: Cat.name,
useFactory: () => {
const schema = CatsSchema;
schema.plugin(require('mongoose-autopopulate'));
return schema;
},
},
]),
],
})
export class AppModule {}
但是使用 mongoose-sequence plugin 必须将 native Mongoose 连接对象传递给插件初始化。这可以通过使用 getConnectionToken 将连接注入(inject)工厂提供程序来实现。方法:
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 {}

关于node.js - NestJs/Mongoose 中的自动增量序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62824276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com