Javascript Node.js模块导出";“预加载”;

Javascript Node.js模块导出";“预加载”;,javascript,mysql,node.js,Javascript,Mysql,Node.js,这是一个mysql.js文件: const mysql = require('mysql'); const config = require('./config.json'); const con = mysql.createConnection({ host: config.dbhost, user: config.dbuser, password: config.dbpass, database: config.dbname, }); module.exp

这是一个mysql.js文件:

const mysql = require('mysql');
const config = require('./config.json');

const con = mysql.createConnection({
    host: config.dbhost,
    user: config.dbuser,
    password: config.dbpass,
    database: config.dbname,
});

module.exports = {
    findUser: function(email) {
        const sql = 'SELECT * FROM users WHERE email = ' + mysql.escape(email);

        con.connect(function(err) {
            if (err) throw err;
            console.log('Connected!');
            con.query(sql, function(err, result) {
                if (err) throw err;
                return result[0].id;
            });
        });
    },
};
然后在我的index.js文件中有以下内容:

const mysql = require('./mysql.js');

console.log(mysql.findUser('example@example.test'));
当代码运行时,它会在db连接完成后输出“未定义”,然后输出“已连接”。即使我在
结果[0].id上执行
控制台.log
,它也会输出1,这是正确的id


问题:调用函数之前,如何先加载mysql.js文件?

您需要等待响应,因为它是一个异步函数。
尝试使用回调或承诺。 回调示例:

mysql.findUser('example@example.test', function(res)){ console.log(res)});

module.exports = {
findUser: function(email, callback) {
    const sql = 'SELECT * FROM users WHERE email = ' + mysql.escape(email);

    con.connect(function(err) {
        if (err) throw err;
        console.log('Connected!');
        con.query(sql, function(err, result) {
            if (err) throw err;
            callback(result[0].id);
        });
    });
},

您是否也通过回调更改了mysql文件?是的,抱歉,没有看到更改,它工作正常!谢谢