无服务器调用可以工作,但是curl会产生错误

时间:2018-08-11 11:38:19

标签: aws-lambda serverless-framework serverless

我有一个无服务器功能,您可以在下面找到代码,并且该功能使用无服务器框架部署在aws lambda上。从此功能中,我称为外部Web API。

当我做serverless invoke -f my_func时,我得到了预期的响应。但是,如果我运行curl命令,它将失败,并且我得到{"message": "Internal server error"}

这是我的curl命令:

   curl -X GET \
  https://0wb3echzu8.execute-api.us-east-1.amazonaws.com/dev/my_func \
  -H 'cache-control: no-cache' \
  -H 'postman-token: 1fc551c0-7010-e1e3-7287-6a0d82d1e91a'

这是我的代码:

var request = require("request");
var options = { method: 'GET',
  url: 'https://api.coinmarketcap.com/v2/listings/',
  headers:
   { 'postman-token': '090e284e-62ad-29f0-0f10-92ae14656a37',
     'cache-control': 'no-cache' } };
module.exports.my_func = (event, context, callback) => {
  request(options, function (error, response, body) {
      if (error) { console.log(error); callback(null, error) }
      console.log(body)
      callback(null, body)
  });
};

这是serverless.yml文件:

service: aws-nodejs
app: sonarsic
tenant: vincent

provider:
  name: aws
  runtime: nodejs6.10


functions:
  my_func:
    handler: handler.my_func
    events:
      - http:
          path: my_func
          method: get
          cors: true

它必须与我的函数中的Web api调用有关。如果我不调用网络api,它就可以正常工作。

如果我通过serverless logs -f my_func查看日志,那么我只会获得使用无服务器调用的通话日志。

在执行curl命令时,我该怎么办才能找出函数中出了什么问题?

在http部分中添加cors:true不能解决问题

cloudwatch已附加到aws lambda,但似乎没有任何内容可写入: enter image description here

1 个答案:

答案 0 :(得分:2)

经过chat的讨论,我们发现响应正文上的statusCode丢失了

let request = require('request');
let options = {
  method: 'GET',
  url: 'https://api.coinmarketcap.com/v2/listings/',
  headers: {
    'postman-token': '090e284e-62ad-29f0-0f10-92ae14656a37',
    'cache-control': 'no-cache',
  },
};
module.exports.my_func = (event, context, callback) => {
  request(options, (error, response, body) => {
      if (error) { console.log(error); callback(null, error) }
      console.log(body)
      callback(null, { body, statusCode: 200 }) // response statusCode added
  });
};