从数据库返回值时,模块导出返回undefined

时间:2018-02-10 11:38:24

标签: javascript node.js

我正在使用Node.js和Express,但我被卡在module.export函数上。这是我的代码:

list.js

exports.getCategory = function () {
    var sql = 'select * from categories';
    db.query(sql,function(error,rows){
        if(error){
            console.log('some error occured %s',error);
            return;
        }else{
            return rows;
        }
    });
}

我有一个全局SQL连接作为数据库。我现在不发布该连接。我在app.js中使用list.js时会打印undefined

app.js

const list = require('./lib/list') 

console.log(list.getCategory)

我在这里未定义。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

需要一个文件名(包括" .js"扩展名),除非文件名是index.js - 在这种情况下,只需要dir名称。所以你需要指定

const list = require('./lib/list.js') 

假设list.js在lib文件夹中,并且lib文件夹与app.js处于同一级别

似乎还有一个问题。 " db.query"调用是异步的。因此,当app.js中的console.log完成时,结果可能无法使用。所以你必须考虑到这一点。如果" db.query"可以返回Promise(而不是回调) - 您可以返回承诺并在" app.js"登录"。然后"承诺。

编辑:

由于它是list.getCategory而不是list.getCategory(),因此尚未进行异步调用 - 因此async不是问题。感谢@oniondomes指出这一点。

答案 1 :(得分:0)

付出很少的努力我终于解决了它和回调错误我需要一个回调函数这里是更正的代码 的 list.js

exports.getCategory = function (callback) {
var sql = 'select * from categories';
db.query(sql,function(error,rows){
    if(error){
        console.log('some error occured %s',error);
        return;
    }else{
        callback(rows);
    }
});
}

<强> app.js

const list = require('./lib/list') 

list.getCategory(function(result){
 console.log(result);

})