[英]Mongoose typescript model creation with multiple connections
我正在嘗試在使用多個連接( 遵循文檔)時創建 model 但我收到以下錯誤:
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) ...
我的代碼如下所示:
數據庫.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
用戶模型.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
錯誤出現在const User = database.model<UserInterface, UserModelInterface>('User', UserSchema)
UserSchema
我不明白的是為什么這條線沒有問題
const User: UserModelInterface = mongoose.model<UserInterface, UserModelInterface>('User', UserSchema)
但這會引發錯誤
const User = database.model<UserInterface, UserModelInterface>('User', UserSchema)
當唯一改變的是連接類型時, mongoose.createConnection()
而不是 mongoose 默認連接
Turns out that as of version mongoose 5.11.11
there are some conflicts with @types/mongoose
mongoose that break class inheritance when using typescript ( see this issue ). 我還在這個討論中找到了我的問題的解決方案,它圍繞將 Document 和 Model 接口從 model 移動到模式構造函數。
在實踐中,這意味着轉動這個
const UserSchema = new mongoose.Schema({
firstname: {
type: String,
required: true,
trim: true
},
lastname: {
type: String,
required: true,
index: true,
trim: true,
},
...
})
const User = database.model<UserInterface, UserModelInterface>('User', UserSchema)
export default User
進入這個
const UserSchema = new mongoose.Schema<UserInterface, UserModelInterface>({
firstname: { // INTERFACES GO HERE
type: String,
required: true,
trim: true
},
lastname: {
type: String,
required: true,
index: true,
trim: true,
},
...
})
// INSTEAD OF HERE
const User = database.model('User', UserSchema)
export default User
對我來說,這看起來像是一個臨時修復,該問題可能只會影響 v5.11.11 ,因為它正在 5.11.12 中進行修補,因此我建議在使用此建議之前訪問上面的鏈接以查看問題狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.