我在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);
})
}
你稍微调整一下代码结构就行了。
const fs = require("fs");
const path = require("path");
const modelsPath = path.join(__dirname, "models");
module.exports.getDatabase = async function () {
var models = {};
// 读取所有模型文件
const files = await fs.promises.readdir(modelsPath);
// 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] = require(path.join(modelsPath, modelPath));
}
global.models = models;
console.log("ODM 模型加载完成");
return global;
};
然后,修改 data.js 文件用新的 getDatabase 函数:
const databaseModule = require("./database");
module.exports.destroy = async function (modelName, id, cb) {
//由于databaseModule.getDatabase()中用到了readdir方法 该方法是异步方法
//需要使用await语法糖等待该异步函数执行完成 否则db是undefined
let db = await databaseModule.getDatabase();
console.log(db.models);
const Model = db.models[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 里获取并使用 Mongoose 模型了。
问题内容: 只是一个关于如何在Java中传递参数的快速问题… 在这种情况下,stdout和stderr(用作tidy()中的参数)的值是否会更改为新的StringBuffer(buffer.substring(i))?我的假设是,它们将作为对象变量(对象指针)始终按值传递吗? 问题答案: 您错报了这里发生的事情-对象引用按值传递(创建了引用的副本),因此调用tidy时 不会 修改stdout和st
我已经编写了一个具有递归评估的可变参数模板函数。对于最后一个参数,我在没有可变参数包的情况下实现了专业化,并且一切正常。 现在我想把可变函数参数转换成模板参数。 这是我的尝试: gcc和clang报告了一个模糊的过载,并且无法使用空参数包在“专业化”和“可变参数”之间做出决定。 我尝试删除特化并检查可变参数模板中的包大小,但是如果没有特化,编译器就无法推断出参数“p”。
问题内容: 我用es6编写了一个模块,然后发布到npm,我想在另一个项目中使用它,所以我这样输入: 但这没有用: 这是我在webpack中的js加载器配置: 当我尝试导入非的模块时,babel效果很好。但是从导入模块,babel似乎不起作用? 问题答案: 请参阅babel文档: 注意:默认情况下,对node_modules的所有要求都将被忽略。您可以通过传递忽略正则表达式来覆盖它。 通常期望的是,
错误java.lang.noClassDefFounderror:org/apache/hadoop/hbase/cellscannable at java_lang_runnable$run.call(来源未知)导入org.apache.hadoop.hbase.util.bytes无效导入定义:'org.apache.hadoop.hbase.util.bytes';原因:启动失败:scrip
我最近阅读了这篇关于使用数组作为函数输入的文章,只是想知道是否可以使用类型提示来暗示数组是的数组? 例如:
问题内容: 我尝试调用-method,但是它总是失败。我的变量始终是。我在这里查看了一些类似的帖子,但没有一个完全适合我的需求。这是我的代码: 这是我尝试解决的方法: 我尝试使用该方法 并且 但是没有任何效果。一直都是。我还尝试给它一个文字字符串作为路径,设置为,甚至更改了我想将其设置为777的目录权限,但注意了。永远是错误的。希望您能为您提供帮助。任何帮助都非常感谢。谢谢 问题答案: 这是一个问