簡體   English   中英

Mongoose typescript model 創建多個連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM