这个错误通常在AWS Lambda与Node.js Express集成的API网关中出现,是因为Lambda函数返回的响应被网关尝试解码,但解码失败导致的。
解决这个问题的一种方法是在Express应用程序中禁用响应的压缩。可以通过以下代码示例来实现:
const express = require('express');
const compression = require('compression');
const app = express();
// 禁用响应的压缩
app.use(compression({ filter: shouldCompress }));
// 声明一个函数来判断是否需要压缩响应
function shouldCompress(req, res) {
if (req.headers['x-no-compression']) {
// 不压缩响应
return false;
}
// 默认压缩响应
return compression.filter(req, res);
}
// 定义API路由和处理程序
app.get('/api', (req, res) => {
res.send('Hello World!');
});
// 启动Express服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在上面的示例中,我们使用了compression中间件来压缩响应。通过在中间件中设置filter
选项,我们可以自定义是否压缩响应。如果请求头中包含x-no-compression
字段,则不会压缩响应。
这样,当Lambda函数返回响应时,API网关就不会尝试解码响应,从而解决了net::ERR_CONTENT_DECODING_FAILED 200
错误。
确保在部署Lambda函数时,将Express应用程序与API网关正确集成,并将Lambda函数作为后端资源与API网关关联。