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

Javascript 从数据库返回值时,模块导出返回未定义的值,javascript,node.js,Javascript,Node.js,我正在使用Node.js和Express,但是我被困在模块上。export功能。这是我的密码: 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); re

我正在使用Node.js和Express,但是我被困在
模块上。export
功能。这是我的密码:

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);
    }
});
}
const list = require('./lib/list') 

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

})
exports.getCategory=函数(){
var sql='select*from categories';
查询(sql,函数(错误,行){
如果(错误){
console.log('发生了一些错误%s',错误);
返回;
}否则{
返回行;
}
});
}
我有一个全局SQL连接作为数据库。我现在不发布连接。当我在app.js中使用list.js时,它会打印未定义的内容

app.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);
    }
});
}
const list = require('./lib/list') 

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

})
const list=require('./lib/list')
console.log(list.getCategory)
我在这里没有定义。我在这里做错了什么?

require需要一个文件名(包括“.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);
    }
});
}
const list = require('./lib/list') 

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

})
app.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);
    }
});
}
const list = require('./lib/list') 

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

})

如果这是一个问题,那么它会产生一个错误这是一个异步问题吗?OP从不调用此函数。他只是想访问它。如果您尝试注销
list
会发生什么?我觉得你的代码很好,只是你没有正确地描述你的问题。您没有在原始问题文本中调用getCategory。“我在这里未定义”,这里是
console.log(list.getCategory)
。这只有在
list
没有
getCategory
属性/方法时才可能,该属性/方法与
list.getCategory()
返回
undefined
的属性/方法完全不同,后者是我评论中的链接…@onindomes console.log(list.getCategory)如果我没有调用函数,这是什么?它记录的是函数本身,而不是它的结果。如果要输出结果,请编写list.getCategory();正如您在给出的答案中所做的那样。@Andreas感谢您提供的链接,它帮助我理解了异步和同步,我发现了问题所在