![](/img/trans.png)
[英]serverless framework, typescript, nodejs and mysql - Error: Received packet in the wrong sequence
[英]Serverless Framework with Node MySQL: PROTOCOL_INCORRECT_PACKET_SEQUENCE error
我在 AWS Lambda NodeJS(使用无服务器框架)上实现简单查询时遇到困难。 在本地运行它是有效的,但是当我将它上传到 AWS 然后尝试使用 API 网关端点运行它时,我收到此错误:
{
"code": "PROTOCOL_INCORRECT_PACKET_SEQUENCE",
"fatal": true
}
我无法在 Google、StackOverflow 或 GitHub 上找到有关此错误的任何信息,也无法弄清楚自己做错了什么。
这就是我正在尝试的。
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '',
user : '',
password : '',
database : ''
});
function getLists (client_id,api_key,callback){
connection.query("SELECT * FROM list WHERE client_id = ?",
[client_id],function(error, results){
connection.end();
callback(error,results);
}
)};
module.exports.run = function(event, context, cb) {
getLists(event.x_mail_list_client_id,'',function(error,results){
if(error){
return cb(null,error);
}
return cb(null,results);
});
};
通常,您遇到的问题是 serverless-optimizer-plugin 无法正确处理动态加载的 NPM 模块或全局变量(例如,在使用 mysql NPM 包时)。 所以你必须从优化中排除它。 该解决方案在很大程度上取决于您使用的无服务器版本和 Node 版本,因此我将在下面列出不同的解决方案:
无服务器 v4 + 节点 v4 :
在您的s-component.json
设置排除项,如下所示:
"custom": {
"optimize": {
"exclude": [
"aws-sdk",
"mysql"
],
"includePaths": [
"node_modules/mysql"
]
}
}
无服务器 v5 + 节点 v4 :在这个无服务器版本中,组件已经过时和删除,取而代之的是支持功能。 因此,将优化器配置直接应用于您的s-function.json
配置文件。
Node v5 : Node v5 中包含的 NPM 可执行文件在内部执行依赖项优化和依赖项模块扁平化。 这与当前的无服务器优化器插件并不真正兼容。 这里的解决方案是添加 NPM 已经优化的依赖项,如@Masatsugu Hosoi 在他上面的回答中提出的那样
"custom": {
"optimize": {
"exclude": [
"aws-sdk",
"mysql"
],
"includePaths": [
"node_modules/mysql",
"node_modules/bignumber.js",
"node_modules/readable-stream",
"node_modules/isarray",
"node_modules/core-util-is",
"node_modules/inherits",
"node_modules/string_decoder"
]
}
}
编辑 awsm.json。
"exclude": [
"aws-sdk",
"mysql"
],
"includePaths": [
"node_modules/mysql",
"node_modules/bignumber.js",
"node_modules/readable-stream",
"node_modules/isarray",
"node_modules/core-util-is",
"node_modules/inherits",
"node_modules/string_decoder"
]
我刚刚遇到了完全相同的问题。
问题在于 browserify 和 mysql 模块。 不幸的是,我找不到真正的解决方案。
通过阅读代码, browserify 是作为构建器唯一可用的选项。
https://github.com/jaws-framework/JAWS/blob/master/lib/commands/deploy_lambda.js
您可以将 'builder' 设置为 false。 这将在将它们发送到亚马逊之前简单地压缩所有文件。
不幸的是(再次)仅仅这样做是行不通的。 出于某种原因,所有文件都在“node_module”文件夹中才能工作,您必须在上传包之前将文件取出。
尽管如此,这一切都是手动的......
编辑:关于最后一部分已经有一个未解决的问题: https : //github.com/jaws-framework/JAWS/issues/239
对于未来的任何到来
在webpack.config.js文件中添加以下内容对我有用
optimization: {
minimize: false
}
Mysql 似乎不喜欢缩小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.