我在database.js中使用函数传参的形式require模块 可是在data.js中引入使用时总是提示模块undefined 这是怎么回事啊?
贴下代码
database.js
module.exports.getDatabase = function () {
var models = {}
// 读取所有模型文件
return new Promise((resolve) => {
fs.readdir(modelsPath, function (err, files) {
// console.log("开始加载 ORM 模型层文件 ");
for (let i = 0; i < files.length; i++) {
let modelPath = files[i]
let modelName = files[i].substring(0, files[i].lastIndexOf('.'))
console.log("加载模型 %s", modelPath);
*models[modelName] = model => {
console.log('ok')
require(path.join(process.cwd(), '/models/', model))
}*
//models[modelName] = modelPath
}
global.models = models
console.log("ODM 模型加载完成");
resolve(global)
if (err) {
reject(err)
}
})
})
}
data.js
module.exports.destroy = async function (modelName, id, cb) {
//由于databaseModule.getDatabase()中用到了readdir方法 该方法是异步方法
//需要使用await语法糖等待该异步函数执行完成 否则db是undefined
let db = await databaseModule.getDatabase();
console.log(db.models)
let modelFunc = db.models[modelName]
console.log(modelFunc)
const Model = modelFunc(modelName)
//const Model = require(path.join(process.cwd(), '/models/', modelName))
Model.findByIdAndDelete(id, (err, obj) => {
if (err) {
return cb("删除失败", null);
}
return cb(null, obj);
})
}
你稍微调整一下代码结构就行了。
然后,修改 data.js 文件用新的 getDatabase 函数:
这样,你就可以在 data.js 里获取并使用 Mongoose 模型了。