【发布时间】:2019-10-19 03:31:43
【问题描述】:
我需要从我的 express 应用程序中发送 JSON 格式的自定义错误消息,并使用 serverless-http 在 lambda 函数中提供服务
如果我弄错了,请纠正我,但据我了解,我们需要使用 LAMBA_PROXY APIG 集成才能发送直接从 lambda 函数定义的自定义错误消息。
这是我迄今为止尝试过的:
res.status(400).json({ message: 'email already taken' });
serverless.yml
functions:
auth:
handler: src/express/auth/index.handler
name: ${self:service}-auth-${env:STAGE}
# warmup: true
integration: lambda-proxy
memorySize: 128
timeout: 15
events:
- http:
path: /auth/
method: ANY
cors: true
- http:
path: /auth/{any+}
method: ANY
cors: true
这是 API 返回的内容(状态码为 400)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Bad Request</pre>
</body>
</html>
关于如何以 JSON 格式发送自定义响应的任何线索?
更新:
经过更多测试,我发现调用next(error) 并没有到达最后一个错误处理程序
const register = async (req, res, next) {
try {
await verifyEmail(req.body.email);
const user = await Users.register(req.body);
const token = sign(user.attrs, {});
res.json({ token, user });
} catch (e) {
next(e);
}
};
const generalError = async (err, req, res, next) => {
// doesn't reach this part! :(
console.log('generalError handler', JSON.stringify(err));
res.status(errorOut.status).json(errorOut);
};
ApiRouter.post('/register', register);
app.use('/auth', ApiRouter);
app.use(generalError);
【问题讨论】:
标签: express lambda aws-api-gateway serverless-framework serverless