Node JS MS SQL Обратные вызовы - PullRequest
0 голосов
/ 17 июня 2020

Неважно, сколько разных постов, книг, руководств и т. Д. c я прочитал, я не могу asp обещаний. Я пытаюсь выполнить кусок кода в Node после того, как запросы SQL завершены, однако я не могу заставить его работать ... Любая помощь будет принята с благодарностью. Мне нужно console.log('done'); для запуска после того, как for l oop завершил работу через массив 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'));

1 Ответ

0 голосов
/ 17 июня 2020

Вот упрощенный пример подключения к базе данных.

// 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;

Вот как я использую свои подключения к базе данных. После этого давайте попробуем с сервером. 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
      });
  }
});

После всего отсюда, если вам нужно выполнить вставку или обновление, вам также необходимо иметь возможность отправлять данные, я не могу обойтись я сейчас думаю об этом, но, может быть, в массиве они разделяются и запрашивают один за другим?

Я знаю, что это не совсем то, что вы хотите, но, по крайней мере, для запросов выбора или удаления это сработает. 1009 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...