节点 JS MSSQL 回调

Node JS MSSQL Callbacks

无论我阅读了多少不同的帖子、书籍、教程等,我似乎都无法把握承诺。在 SQL 请求完成后,我试图在 Node 中执行一段代码,但我似乎无法让它工作……任何帮助都将不胜感激。在 for 循环完成 运行 之后,我需要 console.log('done'); 到 运行 通过 req 数组:

app.post('/QueryWrite', function (req, res) {
var anyErrors = false;
sql.connect(config).then(function (err) {
    if (err) {
        console.log(err);
        res.send(err);
        anyErrors = true;
    }
    var i;
    for (i = 0; i < req.body['query[]'].length; i++) {
        var sqlQuery = req.body["query[]"][i];
        let sqlRequest = new sql.Request();
        sqlRequest.query(sqlQuery, function (err) {
            if (err) {
                console.log(err);
                res.send(err);
                anyErrors = true;
            }
        })
        console.log(req.body.authenticatedAs + " wrote to DB: " + sqlQuery);
    }
}).then(console.log('done'));

这里是数据库连接的简化示例。

// database.js file
const mysql = require("mysql");
const utils = require("util");

const dbCon = mysql.createConnection({
  debug: false,
  host: "localhost",
  user: "root",
  database: "laravel_test_tweety",
  password: "",
  multipleStatements: true,
});

dbCon.query = utils.promisify(dbCon.query);

module.exports = dbCon;

这就是我使用数据库连接的方式。在此之后让我们尝试 server.js

//server.js
// ... here your code with creation of app and such,
// and we are importing dbCon from database.js
const dbCon = require("./database");

// server that listens for requests called `app`
app.post("/QueryWrite", function (req, res) {
  /**
   * in case if you are sending an object as queries
   * we need them as array
   * { query1: 'some query', query2: 'some query' }
   *  =>
   * ['some query', 'some query']
   *
   * So that's why we are using `Object.values`
   */
  let queries = Object.values(req.body["query[]"]);
  if (queries) {
    // So there are couple of options here
    // Let's say you are only selecting stuff from db
    let query = queries.join(";");
    // This is gonna give you something like
    // "SELECT 1; SELECT 2"
    // If you want this to work you need `multipleStatements: true` on 
    // mysqlConfig from database.js
    dbCon
      .query(query)
      .then((results) => {
        console.log(results);
        // if needed do some stuff here and send res back.
        res.json(results);
      })
      .catch(err => {
        console.error(err);
        // do some other stuff
      });
  }
});

从这里开始,如果你需要插入或更新,你还需要能够发送数据,我现在真的无法解决这个问题,但也许在数组中将它们分开并一一查询?

我知道这不是您想要的,但至少 select 或删除查询这会起作用。