使用Jest调用AWS Lambda时,如何让Middy解析字符串格式的Body?
如何配置Middy自动解析Lambda请求的字符串格式Body?
直接用Middy官方的http-json-body-parser中间件就能搞定,步骤如下:
安装中间件
先把这个中间件装到项目里:npm install @middy/http-json-body-parser # 或者用yarn yarn add @middy/http-json-body-parser在Middy配置中添加中间件
不管你是直接用middy()包装处理器,还是用自定义的middyfy函数,只要把这个中间件加进去就行:如果是直接用middy:
import middy from '@middy/core'; import httpJsonBodyParser from '@middy/http-json-body-parser'; const identityUrl: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => { // 现在event.body已经自动解析成IFRequest类型的对象,不用手动转了 const fileUrl = event.body; return formatJSONResponse({ result: fileUrl, }); } export const main = middy(identityUrl) .use(httpJsonBodyParser());如果你的项目里有封装好的
middyfy函数,就把中间件加到这个封装函数里:import middy from '@middy/core'; import httpJsonBodyParser from '@middy/http-json-body-parser'; const middyfy = (handler) => { return middy(handler) .use(httpJsonBodyParser()) // 把这个中间件加在这里 // 其他你已经在用的中间件(比如验证、错误处理)可以保留 }; // 你的处理器代码不变,只是现在body会自动解析 const identityUrl: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => { const fileUrl = event.body; return formatJSONResponse({ result: fileUrl, }); } export const main = middyfy(identityUrl);测试用例无需修改
你原来的测试代码里把body设为JSON.stringify(apiParamsBasic)完全没问题,中间件会自动识别并解析这个字符串,处理器拿到的就是解析后的对象。
这个中间件的逻辑很直白:它会检查请求的Content-Type(默认是application/json),如果符合就自动把字符串body转成对象,同时也支持处理base64编码的body(只要isBase64Encoded设为true)。
内容的提问来源于stack exchange,提问作者Interlated
相关产品推荐
相关产品推荐

