Node JSjs模块导出"pre-load"



这在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'));

当代码运行时,它会输出"未定义",然后"连接!"输出。建立数据库连接后。即使我在result[0].id上进行console.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);
        });
    });
},

最新更新