簡體   English   中英

Node.js中的多個SQL查詢

[英]Multiple sql queries in nodejs

我是nodejs的新手,正在使用nodeJs開發一個演示應用程序,運行多個查詢時遇到問題,我的代碼如下:

exports.dashboard = function(req, res){

 req.getConnection(function(err,connection){

 var id = req.session.userId;
  var queryData =  "SELECT node_questions.question_name,node_questions.description FROM node_questions LEFT JOIN node_user ON node_questions.user_id=node_user.id";
        var query = connection.query(queryData,'SELECT * FROM node_user Where id = ?',[id],function(err,rows)
        {
                console.log(rows);
               res.render('dashboard',{page_title:"Dashboard",session:req.session.userId,email:req.session.email,data:rows});
         });
    });  
};

數據庫連接為:

 app.use(
        connection(mysql,{
            host: 'localhost',
            user: 'root',
            password : 'password',
            port : 3306, //port mysql
            database:'nodeDemo',
            multipleStatements:true

        },'pool') //or single

    );

為什么不使用Promise?

let Promise = require('bluebird'),
    begin = []

begin.push(promise1(a,b))
begin.push(promise2(c.d))

return Promise.all(begin)
    .spread(function (resultFromQuery1, resultFromQuery2) {
        // do something with the result here
    })

您正在混合在一起。 例如,您希望rows是什么? 它應該是第一個查詢還是第二個查詢的結果集? 解決此問題的一種好方法是使用異步模塊(確保首先通過package.json中的npm安裝它)。

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

client = mysql.createConnection({
    user: 'root',
    password : 'password',
    port : 3306, //port mysql
    database:'nodeDemo',
    multipleStatements:true
});

var id = req.session.userId;

async.parallel([
    function(callback) {
        var queryData = '' +
            ' SELECT node_questions.question_name,node_questions.description' +
            ' FROM node_questions' +
            ' LEFT JOIN node_user' +
            ' ON node_questions.user_id=node_user.id';
        client.query(queryData, function (err, rows1) {
            if (err) {
                return callback(err);
            }
            return callback(null, rows1);
        });
    },
    function(callback) {
        client.query('SELECT * FROM node_user Where id = ?', id, function (err, rows2) {
            if (err) {
                return callback(err);
            }
            return callback(null, rows2);
        });
    }
], function(error, callbackResults) {
    if (error) {
        //handle error
        console.log(error);
    } else {
        console.log(callbackResults[0]); // rows1
        console.log(callbackResults[1]); // rows2
        // use this data to send back to client etc.
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM