ani*_*izo 4 node.js aws-lambda amazon-aurora aws-sdk-js
我正在实现一个 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;
}
Run Code Online (Sandbox Code Playgroud)
以下也不起作用
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;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的配置:
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' },
],
},
};
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"lib": [
"es2017"
],
"moduleResolution": "node",
"sourceMap": true,
"target": "es2017",
"outDir": "lib"
},
"exclude": [
"node_modules"
]
}
Run Code Online (Sandbox Code Playgroud)
我只想查询从 Serverless Aurora 获取记录。
有谁能够帮助我?
tho*_*ace 15
发生这种情况的原因是 Webpack(在生产模式下)正在将您的代码通过最小化器,并且正在使用的mysql模块serverless-mysql与最小化不兼容。
您可以在此处查看问题:https : //github.com/mysqljs/mysql/issues/1655。Node 模块依赖于函数名称来构建代码,这是一个相当普遍的问题,因为丑化器/缩小器试图通过将函数名称更改为单个字母来混淆/节省空间。
最简单的解决方法是通过添加以下内容来关闭 webpack 配置中的最小化:
optimization: {
minimize: false
}
Run Code Online (Sandbox Code Playgroud)
在链接的问题中有一些关于配置各种其他最小化插件(如 terser)以不破坏名称的讨论,这将使您在需要时获得最小化的一些好处。
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |