2016-01-17 5 views
0

это главный
Node.js - функция ж/MySQL запросов не работает

9.js 

я Посылаю «связь» детали
3.js поэтому он может быть использован в функции под названием «оо»

var http = require('http'); 
var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : '------------', 
    user  : '2', 
    password : '--------------', 
    database : '1', 
}); 

connection.connect(); 
var server=http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}); 
    var oo = require('/3.js'); 
    var ee = oo(connection); 
    res.end(ee); 
}).listen(80); 

это 3.js

function oo(connection) { 

    var ss = 'SELECT * FROM 1_accounts order by ac_nu asc limit 5'; 
    connection.query(ss, function(err,res,fields){ 
    bb = JSON.stringify(res); 
    }); 
    return bb; 
} 
module.exports = oo; 
пробег

ДАВАЙТЕ:

[email protected]:/# node 9.js 
/3.js:7 
    return bb; 
     ^

ReferenceError: bb is not defined 
    at oo (/3.js:7:9) 
    at Server.<anonymous> (/9.js:20:11) 
    at emitTwo (events.js:87:13) 
    at Server.emit (events.js:172:7) 
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:528:12) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:88:23) 
[email protected]:/# 

он утверждает, что "бб" не определен.
, но он определен в функции.

Я предпочитаю не добавлять никаких «обратных вызовов». пытаясь выяснить самый простой способ получить «bb», возможно, через «возврат», как обычная нормальная функция, как в php и т. д.

+0

В вашем 9.js импорт 'oo' с именем' aa', то попробуйте использовать 'oo'. Вы можете начать с этого. –

+0

Где bb определен в 3.js? И mysql является асинхронным, поэтому вам потребуется обратный вызов –

ответ

0

Есть несколько вещей, которые не так.

Для начала bb не объявлен в том объеме, в котором он используется. вы возвращаете то, что никогда не было объявлено.

Не только это, но bb не было даже объявлено. Прежде чем (или первый раз) вы его используете, вы должны объявить его с помощью var.

Однако основная проблема заключается в том, что вы возвращаетесь, прежде чем даже получите результат запроса. DB означает ввод/вывод, который может занять некоторое время. Вы должны указать обратный вызов для использования при вычислении результата. например

function oo(connection, callback) { 

    var ss = 'SELECT * FROM 1_accounts order by ac_nu asc limit 5'; 
    connection.query(ss, function(err,res,fields){ 
     var bb = JSON.stringify(res); 

     // in node.js it is conventional to reserve the first 
     // argument of a callback for errors. 
     callback(null, bb); 
    }); 
} 
module.exports = oo 

затем в коде клиента:

connection.connect(); 
var server=http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}); 
    var oo = require('/3.js'); 
    oo(connection, function (e, result) { 
     res.end(result); 
    }); 

}).listen(80); 
Смежные вопросы