我收到以下错误:
lib/app.ts:1:8 - error TS1259: Module '"mongoose-sequence"' can only be default-imported using the 'esModuleInterop' flag
Run Code Online (Sandbox Code Playgroud)
在以下代码行中:
import _ from 'mongoose-sequence';
Run Code Online (Sandbox Code Playgroud)
现在,我很高兴地承认我遗漏了整个“下划线作为函数名称”的内容,但该错误没有任何意义,因为该esModuleInterop标志true在我的 ts.config 文件中绝对肯定地设置为。
我正在尝试导入:
declare module 'mongoose-sequence' {
import mongoose = require('mongoose');
var _: (schema: mongoose.Schema, options?: Object) => void;
export = _;
Run Code Online (Sandbox Code Playgroud)
来自猫鼬序列绝对类型定义。
我错过了什么?
我正在将 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);
Run Code Online (Sandbox Code Playgroud)
使用 ES6 导入语法,它会是这样的:
import * as mongoose from 'mongoose';
import * as AutoIncrementFactory from 'mongoose-sequence';
const connection = ...;
const AutoIncrement = AutoIncrementFactory(connection);
Run Code Online (Sandbox Code Playgroud)
然而,由于 NestJs 使用依赖注入,访问本机连接并不那么直接。根据使用 Mongoose 集成 MongoDB 的文档,可以使用@InjectConnection()装饰器访问本机 Mongoose Connection 对象,如下所示:
@Injectable()
export class CatsService {
constructor(@InjectConnection() private connection: Connection) …Run Code Online (Sandbox Code Playgroud)