«Ошибка: полученный пакет в неправильной последовательности.» при подключении к безсерверному авроре - PullRequest
0 голосов
/ 05 мая 2019

Я реализую веб-приложение, которое вызывает лямбда-функцию для получения данных из базы данных.
Я выбрал Serverless Aurora и написал код, но получаю исключение "Error: Received packet in the wrong sequence." в методе запроса.

Я погуглил этот вопрос, но почти все слишком устарело.
В статье говорится, что это проблема browisify, но я ею не пользуюсь.
Я использую серверный фреймворк с машинописью.

const mysql = require('serverless-mysql')({
  config: {
    host: process.env.DB_HOST,
    database: process.env.DB_NAME,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD
  }
});

export async function query(sql: string, param?: Array<string>): Promise<any> {
  const results = await mysql.query(sql).catch(e => {
    console.log(e); // Error: Received packet in the wrong sequence
    throw new Error(e);
  });

  await mysql.end();
  return results;
}

подписка также не работает


export async function query(sql: string, param?: Array<string>): Promise<any> {
  const connQueryPromisified = util
    .promisify(connection.query)
    .bind(connection);
  const result = await connQueryPromisified(sql, param)
    .then(row => {
      console.log(row);
      return row;
    })
    .catch(err => {
      console.log(err); // getting Error: Received packet in the wrong sequence
      throw err;
    });
  return result;
}

Я также пытался использовать службу RDS DATA, но в моем регионе она недоступна.

export async function query(sql: string, param?: Array<string>): Promise<any> {
 const params: aws.RDSDataService.Types.ExecuteSqlRequest = {
    awsSecretStoreArn: '***',
    dbClusterOrInstanceArn: '***',
    database: '***',
    schema: '***',
    sqlStatements: sql
  };
  console.log(params);
  try {
    const rdsService = new aws.RDSDataService({
      apiVersion: '2018-08-01',
      region: 'ap-northeast-1'
    });
    return rdsService
      .executeSql(params)
      .promise()
      .then(d => {
        return d;
      })
      .catch(e => {
        throw new Error(e);
      });
  } catch (err) {
    console.log(err); // nothing to say
    throw new Error(err);
  }
}

А вот мои конфигурации:
webpack.config.js

const path = require('path');
const slsw = require('serverless-webpack');

module.exports = {
  mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
  entry: slsw.lib.entries,
  devtool: 'source-map',
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js',
  },
  target: 'node',
  module: {
    rules: [
      // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
      { test: /\.tsx?$/, loader: 'ts-loader' },
    ],
  },
};

tsconfig.json

{
  "compilerOptions": {
    "lib": [
      "es2017"
    ],
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es2017",
    "outDir": "lib"
  },
  "exclude": [
    "node_modules"
  ]
}

Я хочу запросить только получение записей от Aurora без сервера.
Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 05 мая 2019

Причина, по которой это происходит, в том, что Webpack (в производственном режиме) пропускает ваш код через минимизатор, а модуль mysql, используемый serverless-mysql, не совместим с минимизацией.

Вы можетесм. проблему здесь: https://github.com/mysqljs/mysql/issues/1655. Это довольно распространенная проблема с модулями Node, которые полагаются на имена функций при создании кода, поскольку углификаторы / минификаторы пытаются запутать / сохранить пространство, изменяя имена функций на отдельные буквы.

Простейшим решением было бы отключить свертывание в конфигурации вашего веб-пакета, добавив:

  optimization: {
    minimize: false
  }

В связанном выпуске обсуждается вопрос о настройке различных других плагинов минимизации (например, terser) для не искажать имена, что позволит вам получить некоторую выгоду от минимизации, если вам это нужно.

...