gpt4 book ai didi

mysql - 多次访问mysql数据库并返回json结果的Node js调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:15 25 4
gpt4 key购买 nike

我是 Node.js 新手。我有一个函数“getFromDb”,它访问一个 mysql 数据库并返回一个包含一些数据的 json 文件。如果我有一个查询数据数组,我想通过 for 循环调用同一个函数来为数组的每个元素获取一个 json 文件怎么办?

        var http = require('http');         

http.createServer(function(req, res) {

console.log('Receving request...');

var callback = function(err, result) {
res.setHeader('Content-disposition', 'attachment; filename=' + queryData+ '.json');
res.writeHead(200, {
'Content-Type' : 'x-application/json'
});
console.log('json:', result);
res.end(result);
};

getFromDb(callback, queryData);}
).listen(9999);

function getFromDb(callback, queryData){
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'xxxx',
password : 'xxxx',
database : 'xxxx',
port: 3306
});

connection.connect();
var json = '';
var data = queryData + '%';
var query = 'SELECT * FROM TABLE WHERE POSTCODE LIKE "' + data + '"';
connection.query(query, function(err, results, fields) {
if (err)
return callback(err, null);

console.log('The query-result is: ', results);

// wrap result-set as json
json = JSON.stringify(results);

/***************
* Correction 2: Nest the callback correctly!
***************/
connection.end();
console.log('JSON-result:', json);
callback(null, json);
});
}

最佳答案

您可以为此使用 Node 的异步库。该库具有许多功能,可以使 NodeJS 中的异步编程变得更加容易。 “each”或“eachSeries”函数可以工作。 “each”会同时对 mysql 进行所有调用,而“eachSeries”会等待上一个调用完成。您可以在数组的 getFromDB 方法中使用它。

参见: https://github.com/caolan/async#each

var http = require('http'),
async = require('async');

http.createServer(function(req, res) {

console.log('Receving request...');

var callback = function(err, result) {
res.setHeader('Content-disposition', 'attachment; filename=' + queryData+ '.json');
res.writeHead(200, {
'Content-Type' : 'x-application/json'
});
console.log('json:', result);
res.end(result);
};

getFromDb(callback, queryData);}
).listen(9999);

function getFromDb(callback, queryData){
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'xxxx',
password : 'xxxx',
database : 'xxxx',
port: 3306
});

connection.connect();

var arrayOfQueryData = ["query1", "query2", "query3", "query4", "query5"];
var jsonResults = [];

async.each(arrayOfQueryData, function (queryData, cb) {
var data = queryData + '%';
var query = 'SELECT * FROM TABLE WHERE POSTCODE LIKE "' + data + '"';
connection.query(query, function(err, results, fields) {
if (err)
return cb(err);
console.log('The query-result is: ', results);
// wrap result-set as json
var json = JSON.stringify(results);
console.log('JSON-result:', json);
jsonResults.push(json);
cb();
});

}, function (err) {
connection.end();
// callbacks from getFromDb
if (err) {
callback(err);
}
else {
callback(null,jsonResults);
}
});
}

关于mysql - 多次访问mysql数据库并返回json结果的Node js调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903992/

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