请求正文未从 aws-serverless-express 模块进入 app.js 文件

Posted

技术标签:

【中文标题】请求正文未从 aws-serverless-express 模块进入 app.js 文件【英文标题】:Request body not coming to app.js file from the aws-serverless-express module 【发布时间】:2018-01-09 06:42:45 【问题描述】:

app.js 文件代码:

    app.post('/update/name', function(req, res)
     console.log('Request came  : ', req)  // I printed the whole request no body came
    

lambda.js(这是处理函数)

    'use strict'
    const awsServerlessExpress = require('aws-serverless-express')
    const app = require('./app')
    const binaryMimeTypes = [
    'application/javascript',
    'application/json',
    'application/octet-stream',
    'application/xml',
    'font/eot',
    'font/opentype',
    'font/otf',
    'image/jpeg',
    'image/png',
    'image/svg+xml',
    'text/comma-separated-values',
    'text/css',
    'text/html',
    'text/javascript',
    'text/plain',
    'text/text',
    'text/xml'
   ]
   const server = awsServerlessExpress.createServer(app, null, 
                    binaryMimeTypes)

   exports.handler = (event, context) => 
    console.log('body came from api gateway', event.body) // here we can see the body in cloudwatch logs
    awsServerlessExpress.proxy(server, event, context) // but when this method makes request to our app.js file where the request goes, no body comes there.
   

aws-serverless-express(内置节点模块)代码:

  consider this link for the code : 

https://github.com/awslabs/aws-serverless-express/blob/master/index.js

在 aws-serverless-code 中,我评论了这一行:https://github.com/awslabs/aws-serverless-express/blob/master/index.js#L36 然后我能够在我在 app.js 中阅读的 headers['x-apigateway-event'] 中获取正文,但这是不是正确的方式,因为我正在触摸模块并且当我在没有节点模块的情况下在 github 中提交代码时,如果我团队的其他成员将提取代码,那么他将再次无法获取正文。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我试图使用 aws-serverless-express 将我的快速应用程序端点作为 Lambda 函数调用。所有代码都很好,但是当我使用sam local invoke MyFunction -e event.json 调用该函数时,我会得到一个空的req.body。最终,感谢https://github.com/awslabs/aws-serverless-express/issues/92,我意识到事件文件头丢失了Content-Type,并且不接受application-json。将两者都添加到headers 解决了这个问题。

"headers": 
  "Accept": "application/hal+json,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Content-Type": "application/json;charset=UTF-8"

我曾使用sam local generate-event api 生成事件文件。

【讨论】:

【参考方案2】:

我尝试了 AWS CodeStar 的 Web 服务模板,使用 Express.js 和 Lambda 并遇到了同样的问题。经过几个小时的谷歌搜索和阅读上述 github 线程。我刚刚做了以下事情:

安装正文解析器:

$ npm install body-parser --save

然后更新app.js

app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true ));
app.use(awsServerlessExpressMiddleware.eventContext());

应该这样做

【讨论】:

以上是关于请求正文未从 aws-serverless-express 模块进入 app.js 文件的主要内容,如果未能解决你的问题,请参考以下文章

内联图像未从 GatsbyJS 中的降价文件正文加载

配对请求 - 未从 uid 1000 导出

Alamofire JSON 请求未从服务器中提取数据

Python 请求模块未从 Web 服务器获取最新数据

Service Fabric 运行时未从 Actor 服务实例回收未使用的内存

Axios 拦截器未从 vuex 商店获取当前用户身份验证令牌