You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest调用AWS Lambda时,如何让Middy解析字符串格式的Body?

如何配置Middy自动解析Lambda请求的字符串格式Body?

直接用Middy官方的http-json-body-parser中间件就能搞定,步骤如下:

  1. 安装中间件
    先把这个中间件装到项目里:

    npm install @middy/http-json-body-parser
    # 或者用yarn
    yarn add @middy/http-json-body-parser
    
  2. 在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);
    
  3. 测试用例无需修改
    你原来的测试代码里把body设为JSON.stringify(apiParamsBasic)完全没问题,中间件会自动识别并解析这个字符串,处理器拿到的就是解析后的对象。

这个中间件的逻辑很直白:它会检查请求的Content-Type(默认是application/json),如果符合就自动把字符串body转成对象,同时也支持处理base64编码的body(只要isBase64Encoded设为true)。

内容的提问来源于stack exchange,提问作者Interlated

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:26:05