gpt4 book ai didi

javascript - 通过模块导出传递对象

转载 作者:行者123 更新时间:2023-11-29 19:06:17 24 4
gpt4 key购买 nike

我对 Nodejs 和 Javascript 还很陌生,如果我的问题看起来很简单,我很抱歉,但我很挣扎,而且我似乎无法在网上找到答案。

我想做的基本上是调用一个脚本(sqlRequest.js)并在调用它时发送一个整数。该脚本将向我的数据库发送一个 sql 请求,并将结果(一个对象)返回到原始文件。

代码如下:

router.post('/request', function(req, res, next){
var id = req.body.id;
var essai = require('./sqlRequest.js');

console.log("INDEX: "+essai.sendSQL(id)); });

现在是 sqlRequest.js 代码:

exports.sendSQL = function(id) {    
var mysql= require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'bcombes',
password : 'bertrand1994',
database : 'totalkpi'
});
connection.connect();
var sql ="SELECT * FROM tra_ticket where id=?";
var insert=[id];
sql=mysql.format(sql, insert);

connection.query(sql, function(err, rows, fields) {
if (err) {
console.log('Error while performing Query.');
connection.end();
}
else {
connection.end();
console.log(rows);
return rows;
}
});};

在控制台上我可以看到 console.log("INDEX: "+essai.sendSQL(id));似乎未定义并显示在 console.log(rows) 之前。

服务器是否有可能不等待函数完成并显示变量?

无论如何,感谢您花时间提供帮助。

最佳答案

您在文件之间传递变量的逻辑很好。您看到 essai.sendSQL(id) 返回 undefined 的原因是因为 connection.query(...) 是异步调用的,并且,正如您在您的问题中提到,console.log 在数据库查询完成之前触发。

要解决该问题,您只需稍微重构代码即可:

var essai = require('./sqlRequest.js');

router.post('/request', function(req, res, next){
var id = req.body.id;
// send callback to sendSQL
essai.sendSQL(id, function(index) {
// this will only fire once the callback has been called
console.log("INDEX: " + index)
})
});

然后在 sqlRequest.js 中:

exports.sendSQL = function (id, cb) {
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'bcombes',
password: 'bertrand1994',
database: 'totalkpi'
});
connection.connect();
var sql = "SELECT * FROM tra_ticket where id=?";
var insert = [id];
sql = mysql.format(sql, insert);

connection.query(sql, function (err, rows, fields) {
if (err) {
console.log('Error while performing Query.');
connection.end();
}
else {
connection.end();
console.log(rows);
// call the callback
cb(rows);
}
});
};

关于javascript - 通过模块导出传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com