“错误:以错误的顺序接收到数据包。”当连接到无服务器 aurora 时

2024-02-24

我正在实现一个 Web 应用程序,它调用 lambda 函数从数据库获取数据。
我选择了 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"
  ]
}

我只想查询从 Serverless Aurora 获取的记录。
有谁能够帮助我?


发生这种情况的原因是 Webpack(在生产模式下)正在将您的代码置于最小化器中,并且mysql模块serverless-mysql使用与最小化不兼容。

您可以在这里查看该问题:https://github.com/mysqljs/mysql/issues/1655 https://github.com/mysqljs/mysql/issues/1655。对于依赖函数名称来进行代码构建的 Node 模块来说,这是一个相当常见的问题,因为丑陋的工具/压缩器试图通过将函数的名称更改为单个字母来混淆/节省空间。

最简单的修复方法是通过添加以下内容来关闭 webpack 配置中的最小化:

  optimization: {
    minimize: false
  }

链接问题中有一些关于配置各种其他最小化插件(如 terser)的讨论notmangle 名称,这将使您能够在需要时获得最小化的一些好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“错误:以错误的顺序接收到数据包。”当连接到无服务器 aurora 时 的相关文章

随机推荐