从数据库返回值时,模块导出返回未定义



我正在使用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时,它会打印未定义的

app.js

const list = require('./lib/list') 
console.log(list.getCategory)

我在这里不确定。我在这里做错了什么?

需求需要一个文件名(包括" .js"扩展名(,除非文件名是index.js-在这种情况下,只有dir名称才能做到。因此,您需要指定

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

假设List.js在LIB文件夹中,LIB文件夹与App.js

处于同一级别

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

编辑:

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

在几乎没有努力的情况下,我终于解决了,回调错误我需要回调函数,这是校正的代码 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);
})

最新更新