node.js - 带有express的NodeJS,无法加载模型
问题描述
我将 NodeJS 与 express、consign、body-parser 等一起使用。
我正在尝试在 var 中加载模块,所以我可以使用它们的功能,但我得到了:
TypeError: Cannot read property 'listar' of undefined
at app.get (/home/sartori/Documentos/Projetos/react-system/api/controllers/autores.js:6:11)
at Layer.handle [as handle_request] (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/layer.js:95:5)
at next (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/layer.js:95:5)
at /home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/index.js:335:12)
at next (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/index.js:275:10)
at /home/sartori/Documentos/Projetos/react-system/api/node_modules/express-validator/lib/express_validator.js:250:5
at Layer.handle [as handle_request] (/home/sartori/Documentos/Projetos/react-system/api/node_modules/express/lib/router/layer.js:95:5)
这是我的控制器:
module.exports = app => {
app.get('/api/autores', (req,res) => {
let connection = app.connection.connectionFactory();
let autores = app.models.AutoresDao(connection);
autores.listar((error,result) => {
if(error) {
console.log('Erro ao listar os autores: ' + error);
res.status(500).send(error);
} else {
res.json(result);
}
});
});
}
这是 AutoresDao:
function AutoresDao(connection) {
this._connection = connection;
}
AutoresDao.prototype.listar = callback => this._connection.query('SELECT * FROM autores', callback);
module.exports = function() {
return AutoresDao;
}
问题是:无法读取未定义的属性“listar”。
显然问题在于加载 AutoresDao 文件。
我 100% 确定文件路径,AutoresDao 位于模型文件夹中,已在寄售时加载。控制器、连接、快速配置等也是如此。
知道我做错了什么吗?
解决方案
如果要以这种方式格式化对象构造函数,则需要使用“new”关键字。您必须重新格式化 AutoresDao 函数以显式返回对象,或者在将其分配给控制器中的 autores 时使用“new”关键字。
请查看本文以了解不同实例化模式的说明。
https://medium.com/dailyjs/instantiation-patterns-in-javascript-8fdcf69e8f9b
希望有帮助!干杯。
推荐阅读
- r - 如何通过反复试验或 R 中更好的特定替代方法将数据集拟合到特定函数?
- javascript - 使用循环和 if else 语句遍历数组
- algorithm - 具有两个变量的递归函数的时间复杂度
- javascript - 如何让 Closure Compiler 找到 window.crypto?
- sql - 一年中每个月的 SQL 计数结果
- javascript - Rails 中的 Turbolinks 与使用 javascript 的 Alpine JS 下拉列表和 Hubspot 表单冲突
- circleci - CircleCI 分支过滤器在“工作 > 构建”部分中不起作用
- python - 在没有 sql 函数的情况下在 PySpark 中对数据框进行排序
- javascript - 引导按钮切换/切换状态
- excel - 如何在 GSHEETS(或 EXCEL)中格式化 20 位数字