Mysql 如何从var require导入函数值?
我有以下代码: server.js: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(
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未知),我无法确定问题出在哪里。