Node.js mysql Q;什么是等待查询完成的最佳方式

时间:2016-05-22 14:25:18

标签: node.js

首先,我感到很尴尬,仍然没有完全理解Javascript中的回调。我的简单代码假设等待mysql查询完成然后发送回Web客户端,但现在不按顺序。 这就是我所看到的:

第3步:未定义

第1步:约翰

第2步:[' John' ]

Q1:除了异步,我可以在app.get中做任何更好的方法(' / db1')?

Q2:在db.js中,是否需要异步?我确实看到样本没有异步连接/查询/结束,但认为这是文件io?

main.js

const express = require('express')  
const app = express()  
const port = 8080

var db1 = require("./db.js");

app.get('/', (request, response) => {  
  response.send('Hello from Express!')
})

app.get('/db1', (request, response) => {  
   var q1 = db1.query1();
   console.log("step 3: " + q1);
   response.send('Hello from db1! ' + q1);
})

app.listen(port, (err) => {  
  if (err) {
    return console.log('something bad happened', err)
  }
  console.log(`server is listening on ${port}`)
})

db.js

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

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123.abc',
  database : 'mydb'
});

var query1 = function() { 
    var q1 = "NA";

    async.series([
        function(callback) {
            connection.connect();

            connection.query('SELECT * from customer;', 
                             function(err, rows, fields) {
              if (err){
                  console.log("---- Not supposed to see this -----");
                  callback(true);
              }

              q1 = rows[0].name; 
              console.log('step 1: ', rows[0].name);
              callback(null, q1);
            });

          },
        ], 
        function(err, result) {
            connection.end();
            if(err) {
                return "NA";
            } else {
                console.log("step 2: ", result);
                return result[0].name;
            }
         }
    );
};

module.exports = {
    query1: query1
};

0 个答案:

没有答案
相关问题