在我的项目中,我正在使用无服务器。我正在尝试更改默认的statusCodes和响应。我尝试了以下方法。
dashboard:
handler: src/common/dashboard.dashboard
role: CommonServicesFullAccessRole
timeout: 30
events:
- http:
integration: lambda
path: ui/dashboard/
method: get
request:
parameters:
paths:
id: true
response:
headers:
Content-Type: "'text/html'"
template: $input.path('$')
statusCodes:
400:
pattern: '[\s\S]*Bad Request[\s\S]*'
template: $input.path('$.errorMessage')
headers:
Content-Type: "'text/plain'"
在我的lambda中,我将返回错误回调为
return callback('Bad Request');
仍然,我无法获得具有指定statusCode的响应。我不确定确切的错误在哪里。以下是我得到的答复。
请帮助我解决此问题。 谢谢...
答案 0 :(得分:1)
尝试以下方法。
# Instead of "return callback('Bad Request');"
callback(new Error('Bad Request'));
尽管我不是Node
用户,但我已经在Error
中使用Node
对象看到了这些示例代码。
对于Python
,如果在serverless
块上使用您的response
配置,我会对其进行测试。
raise Exception('Bad Request') # in case of Python
-编辑-
我认为我的serverless.yml
与您的区别不大,因为我只是复制了您的部分。
但是,我附上我的测试代码,希望对您有所帮助。
#serverless.yml
service: "lambda"
provider:
name: aws
runtime: nodejs6.10
region: ap-northeast-2
stage: test
package:
exclude:
- "*/**"
include:
- "handler.js"
functions:
api-test:
handler: handler.functionOne
events:
- http:
method: get
path: fire
integration: lambda
response:
headers:
Content-Type: "'text/html'"
template: $input.path('$')
statusCodes:
400:
pattern: '[\s\S]*Bad Request[\s\S]*'
template: $input.path('$.errorMessage')
headers:
Content-Type: "'text/plain'"
#handler.js
module.exports.functionOne = function(event, context, callback) {
callback(new Error('Bad Request'));
}
#curl
$ curl -X GET https://xxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/test/fire -v
.
.
.
< HTTP/2 400
< content-type: text/plain
< content-length: 11
< date: Mon, 15 Oct 2018 12:40:34 GMT
.
.
.
Bad Request