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

标签 mysql json node.js

我是 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/

相关文章:

php - 从源代码安装 php 时出错

java - 从更新的行中获取值

Javascript - 将大对象文字转换为另一个对象文字

arrays - jq - 为数组上的值添加前缀

node.js - Docker、Protractor 和 SauceLabs 发现“错误 : No update-config. json”

mysql - Django - 使用注释提高查询集的性能

php - 从 MySQL 中的 4 个表中选择数据

php - NodeJS Oboe 不向 PHP 服务器发送请求正文

javascript - 如何将带有静态 Assets 的 React 组件发布到 npm?

javascript - Node.js:长时间延迟