我正在将一个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使用依赖注入,访问本地连接不是那么直接。根据使用Mongoose集成MongoDB的文档,访问本地Mongoose连接对象可以使用@InjectConnection()
装饰器来完成,如下所示:
@Injectable()
export class CatsService {
constructor(@InjectConnection() private connection: Connection) {}
}
但是由于TypeScript decorators只能附加到类声明、方法、访问器、属性或参数,我不知道如何注入连接,需要插件并在我的Schema类上初始化它。
2条答案
按热度按时间ylamdve61#
可以使用
MongooseModule
的forFeatureAsync()
方法沿着工厂提供者(即useFactory
)为给定的模式注册插件。以下是official documentation中的示例:
然而,对于
mongoose-sequence
插件,需要将本地Mongoose连接对象传递给插件初始化。这可以通过使用getConnectionToken
方法将连接注入工厂提供程序来实现:qq24tv8q2#
我也遇到了同样的问题,但这对我很有效