【发布时间】:2021-01-14 02:38:52
【问题描述】:
我正在尝试使用多个连接 (following the docs) 创建模型,但出现以下错误:
TS2345: Argument of type 'Schema<Document<any>, Model<Document<any>>>' is not assignable to parameter of
type 'Schema<UserInterface, UserModelInterface>'.
Types of property 'methods' are incompatible.
... (a bunch of 'is not assignable - is missing the following properties' errors follow) ...
我的代码如下所示:
database.ts
import mongoose from "mongoose";
// const mongo = mongoose.connection(process.env.DB_URI!, {
const mongo = mongoose.createConnection(process.env.DB_URI!, {
useUnifiedTopology: true,
useNewUrlParser: true,
useFindAndModify: false,
useCreateIndex: true
})
export default mongo
UserModel.ts
import mongoose, {Model} from 'mongoose';
import bcrypt from 'bcrypt'
import database from "../database";
interface UserDocumentInterface extends mongoose.Document {
firstname: string
lastname: string
...
}
interface UserInterface extends UserDocumentInterface {
// Instance methods
hashPassword(password: string): Promise<string>
...
}
export interface UserModelInterface extends Model<UserInterface> {
// Static methods
// Currently empty
}
const UserSchema = new mongoose.Schema({
firstname: {
type: String,
required: true,
trim: true
},
lastname: {
type: String,
required: true,
index: true,
trim: true,
},
...
})
// Methods definitions
UserSchema.methods.hashPassword = async function(password) {
return await bcrypt.hash(password, 10);
}
...
// const User: UserModelInterface = mongoose.model<UserInterface, UserModelInterface>('User', UserSchema)
const User = database.model<UserInterface, UserModelInterface>('User', UserSchema)
export default User
错误出现在UserSchemaconst User = database.model<UserInterface, UserModelInterface>('User', UserSchema)中
我不明白为什么这条线没有问题
const User: UserModelInterface = mongoose.model<UserInterface, UserModelInterface>('User', UserSchema)
但是这个会报错
const User = database.model<UserInterface, UserModelInterface>('User', UserSchema)
当唯一改变的是连接类型时,mongoose.createConnection() 而不是 mongoose 默认连接
【问题讨论】:
-
我真的不知道上面的问题。但是为了分享我的经验,我尝试在一个大型项目中使用 Mongoose 和类型,这确实很麻烦。它从来没有真正正确地工作过。同样使用底层 MongoDB 也不是一个好的决定(至少对于我们的数据结构而言)。我最近切换到使用 PGSQL 的 Prisma,TypeScript 开发人员体验远远超过我使用 Mongoose 和 NoSQL 所获得的体验。
标签: node.js mongodb typescript mongoose