Mysql 如何从var require导入函数值?

Mysql 如何从var require导入函数值?,mysql,node.js,Mysql,Node.js,我有以下代码: server.js: var sql = require('./libs/mysql'); app.get('/status', function(req, res) { res.send(sql.readName('1600')); }); mysql.js: exports.readName = function(name){ var connection = mysql.createConnection(

我有以下代码: server.js:

var sql             = require('./libs/mysql');
    app.get('/status', function(req, res) {  
       res.send(sql.readName('1600'));
    });
mysql.js:

exports.readName = function(name){

    var connection = mysql.createConnection(option);
    connection.connect();
    connection.query('SELECT id FROM asterisk.users WHERE name= '+name, function (err, rows, fields) {


    console.log('mysql: ' +rows[0].id);
    return(rows[0].id);

  });

现在,当我发送GET时,我无法收到响应。但在控制台日志中我看到了正确的答案。我的错误在哪里?

node.js中的大多数磁盘读取/DB访问都是异步完成的。这使得node.js的速度与它声称的一样快。您需要使用回调函数来处理这些读取操作的结果。如果您熟悉ajax,其概念与之类似

您正在从异步运行的
连接返回。query
。这件东西哪儿也没有归还
readName
实际上不返回任何内容。您需要做的是实际传入返回值的回调:

app.get("/status", function (req, res) {
    sql.readName("1600", function (err, rows, fields) {
        /* handle err */

        res.send(rows[0].id);
    });
});
当然,必须调用此回调:

exports.readName = function (name, cb) {
    /* snip */
    connection.query(query + name, cb);
});

无法获取结果,因为return语句位于函数
函数(err、rows、fields)
中。您可以像这样使用回调

var sql = require('./libs/mysql');
app.get('/status', function(req, res) {  
   sql.readName('1600', function(result){
       res.send(result);
   });
});

exports.readName = function(name, callback){

var connection = mysql.createConnection(option);
connection.connect();
connection.query('SELECT id FROM asterisk.users WHERE name= '+name, 
    function (err, rows, fields) {
        console.log('mysql: ' +rows[0].id);
        callback(rows[0].id);
    });
}

谢谢你的帮助。我发现上面描述的http错误原因。如果使用类似于此回调的回调函数(行[0].id),则会出现错误,但如果使用类似于此回调的语法('id:'+行[0].id),则一切正常。因此,当我们发送res.send(response)时,我们不能发送未命名的数据,需要在其中添加一些描述。 因此,我的最终代码如下所示:
server.js

var sql = require(./mysql);
app.get('/status', function(req, res) {  
   sql.readName('1600', function(result){
       res.send(result);
   });
});   
mysql.js

var mysql=require(mysql);
exports.readName = function(name, callback){

    var connection = mysql.createConnection(option);
    connection.connect();

    connection.query('SELECT id FROM asterisk.users WHERE name= '+name,
    function (err, rows, fields) {
            if(err) callback(err);
            else{
           console.log(rows[0].id);
            callback('ID: '+rows[0].id);
            }
        });
       return true;
};

mysql.js
不完整或有语法错误我尝试了您的方法,但当我发送get/status时,我收到错误:http:error:ConnectionError:HTTPConnectionPool(host='localhost',port=1337):url:/status超过了最大重试次数(原因:http/1.1 2未知),我无法确定问题出在哪里。