невозможно установить для множественного состояния значение true в экспресс-узле knex - PullRequest
0 голосов
/ 19 февраля 2019

Я унаследовал приложение node.js для RESTFUL API, которое использует пул knex для подключения к MySQL.У меня есть nned для выполнения нескольких запросов в одной функции (операторе), и, насколько я понимаю, для этого мне нужно установить для множественного состояния значение true в настройках пула knex.Я сделал это:

    const connection = (user, password) =>
      knex({
       client: "mysql",
       connection: {
       multipleStatements: true,
       host: process.env.MYSQL_IP,
       port: process.env.MYSQL_PORT,
       user,
       password,
       database: "",
       dateStrings: true,
          }
});

Однако, похоже, это не применяется, и я не могу выполнить несколько операторов в одном запросе (согласно документации в пуле mysql):

var qString = 'SELECT ?;SELECT ?'
   self._client.query(qString, [1,5], function (err, result) {

И если я проверяю свой клиент, я вижу, что множественные состояния все еще устанавливаются в false:

    Pool {
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  config:
   PoolConfig {
     acquireTimeout: 10000,
     connectionConfig:
      ConnectionConfig {
        host: 'xxx.xxx.xxx.xxx',
        port: 'xxxx',
        localAddress: undefined,
        socketPath: undefined,
        user: 'xxxxxxx',
        password: 'xxxxxxx',
        database: 'xxxxxxxxx',
        connectTimeout: 10000,
        insecureAuth: false,
        supportBigNumbers: false,
        bigNumberStrings: false,
        dateStrings: false,
        debug: undefined,
        trace: true,
        stringifyObjects: false,
        timezone: 'local',
        flags: '',
        queryFormat: undefined,
        pool: [Circular],
        ssl: false,
        multipleStatements: false,
        typeCast: true,
        maxPacketSize: 0,
        charsetNumber: 33,
        clientFlags: 455631 },
     waitForConnections: true,

Поэтому мой вопрос - есть ли где-нибудь еще, где я могу изменить этот параметр (экспресс-сеанс или ???)или, может быть, у кого-то есть идеи?

1 Ответ

0 голосов
/ 21 февраля 2019

Я не могу найти multipleStatements: true связанных настроек в knex doc

, но в соответствии с этой проблемой

возможно, вы можете присоединиться вручнуюнесколько операторов в одной строке запроса, например:

const queries = [
   knex.table("game0.stats").update(updateCurrency),
   knex.table("game1.stats").update(updateCurrency),
   knex.table("game2.stats").update(updateCurrency),
];
const multiQuery = queries.join(";");
console.log(multiQuery);
return knex.raw(multiQuery)
   .then((result) => {
   })
   .catch((error) => {
   });

, кроме того, вы можете заключить функцию перед выполнением запроса:

function executeMultiStatements(queries) {
  // do some checks
  // avoid sql injection
  // ...
  const multiQuery = queries.join(';')
  return knex.raw(multiQuery);
}
...