我正在尝试制作一个database
文件,该文件为mongoose (MongoDb)
提供连接,模型等。
所以当我返回猫鼬模型时,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
注意:我是这个平台的新手,请原谅我错字。
答案 0 :(得分: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
的原因
答案 1 :(得分:0)
在您的代码“ MongoModel”中引用了一个async函数,该函数始终返回一个Promise。这就是将对象登录到控制台时看到Promise { Model { files } }
的原因。您可以做的两件事是:
选项1:从函数声明中删除“异步”关键字。这样,您的函数将返回模型对象而不是诺言。 选项2:添加回调以获取诺言返回的数据,如下所示:
MongoModel({connectionName:'files', collection: 'files', schema: FilesSchema})
.then((FileModel) => {
console.log(FileModel.create); // should display [Function: create]
});