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

NodeJS中如何将event.headers转换为小写以适配AWS?

解决Event Headers键转换为小写的问题

我来帮你修正代码里的问题,先拆解下你之前的实现哪里出了错,再给出可行的解决方案:

原代码的问题分析

  • 你自己写的makeLower函数没有返回值,所以执行const headers = makeLower(event.headers)后,headers会是undefined,自然无法读取headers['content-type']
  • 函数内部的赋值逻辑完全错了:event.headers[key] = key.toLowerCase()是把原header的值改成了键的小写字符串,而不是创建一个键为小写的新条目

正确的实现方式

你参考的那个思路是对的,只需要调整代码写法,确保正确生成转换后的headers对象:

修正后的index.js代码

// 正确的转换函数:将headers的键全部转为小写
function makeLower(headers) {
  const lowerCaseHeaders = {};
  for (const key in headers) {
    // 把原键转小写作为新键,保留原对应的值
    lowerCaseHeaders[key.toLowerCase()] = headers[key];
  }
  return lowerCaseHeaders;
}

// 使用转换后的headers
const headers = makeLower(event.headers);
// 或者直接替换event.headers,后续代码都用event.headers即可
// event.headers = makeLower(event.headers);

console.log('HEADERS: ' + headers['content-type']);

如果你习惯更简洁的写法(ES2019及以上版本支持),可以用Object.fromEntries实现:

const headers = Object.fromEntries(
  Object.entries(event.headers).map(([key, value]) => [key.toLowerCase(), value])
);

测试用例调整

你的测试用例现在传入的是小写键的headers,应该改成传入大写/混合大小写的键,才能验证转换逻辑是否生效:

it('should still return 202, with uppercase headers > converting them to lower', done => {
  // 传入大写键的headers,验证转换逻辑
  event.headers = {'Content-Type': 'application/json', 'X-Custom-Header': 'test'};
  lambda.handler(event, null, (err, request) => {
    should.not.exist(err);
    should.exist(request);
    // 额外断言转换后的headers是否正确
    const processedHeaders = makeLower(event.headers);
    should.equal(processedHeaders['content-type'], 'application/json');
    should.equal(processedHeaders['x-custom-header'], 'test');
    done();
  });
})

这样调整后,不管原headers的键是大写还是混合大小写,都能统一转换成小写键,避免AWS相关的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:39:16