首页 > 解决方案 > 带有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 位于模型文件夹中,已在寄售时加载。控制器、连接、快速配置等也是如此。

知道我做错了什么吗?

标签: node.jsexpressloading

解决方案


如果要以这种方式格式化对象构造函数,则需要使用“new”关键字。您必须重新格式化 AutoresDao 函数以显式返回对象,或者在将其分配给控制器中的 autores 时使用“new”关键字。

请查看本文以了解不同实例化模式的说明。

https://medium.com/dailyjs/instantiation-patterns-in-javascript-8fdcf69e8f9b

希望有帮助!干杯。


推荐阅读