-1

我正在尝试制作一个database文件,mongoose (MongoDb).

因此,当我返回 Mongoose 模型时,create 方法变为“未定义”。

database.js

//model connection 
exports.MongoModel = async function ({connectionName, collection, schema}){
    //get connection data 
    const databaseData = connectionsArray[connectionName];

    //create url 
    const mongoUrl = `${dbUrl}${databaseData.databaseName}`;

    //connection 
    const connection = Mongoose.createConnection(mongoUrl, databaseData.options);

    //model with schema
    const Model = connection.model('files',schema);

    console.log(Model.create);// displays [Function: create] in console

    //return model
    return Model
}//MongoModel ends 

导入到其他文件时

FileUploads.js

const { MongoModel } = require('@src/config/database');


const FilesModel = MongoModel({connectionName:'files', collection: 'files', schema: FilesSchema});

console.log(FilesModel); // Displays Promise { Model { files } }
console.log(FilesModel.create); // Displays undefined

注意:我是这个平台的新手,所以请原谅我的错字。

4

2 回答 2

0

那么试试这样:

//model connection 
function MongoModel({connectionName, collection, schema}){
    //get connection data 
    const databaseData = connectionsArray[connectionName];

    //create url 
    const mongoUrl = `${dbUrl}${databaseData.databaseName}`;

    //connection 
    const connection = Mongoose.createConnection(mongoUrl, databaseData.options);

    //model with schema
    const Model = connection.model('files',schema);

    console.log(Model.create);// displays [Function: create] in console

    //return model
    return Model
}//MongoModel ends 

module.exports = { MongoModel }

您需要导出一个包含您的对象MongoModel。现在您应该能够在 import 语句中对其进行解构。

而且我看不到在async这里使用的理由

于 2020-06-15T07:42:22.480 回答
0

在您的代码中,“MongoModel”引用了一个始终返回Promise的异步函数。这就是您在将对象记录到控制台时看到的原因。您可以做的两件事是:Promise { Model { files } }

选项 1:从函数声明中删除“异步”关键字。这样,您的函数将返回您的模型对象而不是承诺。方案二:添加回调来获取promise返回的数据,如下图:

MongoModel({connectionName:'files', collection: 'files', schema: FilesSchema})
    .then((FileModel) => {
         console.log(FileModel.create); // should display [Function: create]
});
于 2020-06-15T08:07:51.887 回答