NodeJS:ASync /回调问题

时间:2017-09-05 06:56:21

标签: javascript sql node.js asynchronous callback

我正在使用NodeJS框架,其中sql在主体之后执行。

我使用了基本的sql连接块,并且不确定如何在块中集成异步或回调。

我的代码如下:

 var mysql = require('mysql');
 var pool = mysql.createPool({
     connectionLimit: 100,
     host: "localhost",
     user: "...user...",
     password: "...pw...",
     database: "...db..."
  });

... ... ...

  app.get('/*', function(req, res) {


  var sql = mysql.format("SELECT * FROM test_rest WHERE location=? LIMIT 2", [user_input]);


  pool.getConnection(function(err,connection) {
        if (err) throw err;
        connection.query(sql, function (err, result, fields) {
            connection.release();
            if (err) throw err;


         });
  });


 var jsonResponse = [];
 var obj = {};
 obj["text"] = 'hi this is' + user_nsew_1;

 jsonResponse.push(obj);
 res.send(jsonResponse);
 });

2 个答案:

答案 0 :(得分:1)

您必须在内部回调中发送响应,因为这是数据可用的唯一位置:

app.get('/*', function(req, res) {

    var sql = mysql.format("SELECT * FROM test_rest WHERE location=? LIMIT 2", [user_input]);

    pool.getConnection(function(err,connection) {
        if (err) {
            res.status(500).send("could not get database connection");
            return;
        }
        connection.query(sql, function (err, result, fields) {
            connection.release();
            if (err) {
                res.status(500).send("database query failed");
                return;
            }
            var jsonResponse = [];
            var obj = {};
            obj["text"] = 'hi this is' + user_nsew_1;

            jsonResponse.push(obj);
            res.send(jsonResponse);
         });
     });
 });

此外,由于您计划将用户输入合并到sql查询中,因此请注意对输入进行适当的清理,这样您就不会受到sql injection attacks的攻击。<​​/ p>

答案 1 :(得分:0)

您必须确保您使用的MySQL库支持Promise。 >>> LegacyIterable.__len__ = lambda x: 3 >>> choice(LegacyIterable()) 'c' await需要哪些。您可以使用Bluebird's promisifyAll来包装库。或者你可以使用promise来封装mysql库。

例如async

async-db.js

用法const mysql = require('mysql') const pool = mysql.createPool({ connectionLimit: 100, host: "localhost", user: "...user...", password: "...pw...", database: "...db..." }); let query = function( sql, values ) { return new Promise(( resolve, reject ) => { pool.getConnection(function(err, connection) { if (err) { reject( err ) } else { connection.query(sql, values, ( err, rows) => { if ( err ) { reject( err ); } else { resolve(rows); } connection.release(); }); } }); }); } module.exports = { query }

test.js