【发布时间】:2021-08-28 12:07:20
【问题描述】:
我正在尝试使用 nodeJS 在本地读取一个 JS 文件(压缩以便它可以适应 lambda 边缘限制)并在响应中返回它,但我从标题中得到错误。这是为什么? aws edge 是否禁止 gzip 正文?
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
var noCacheHeaders = {
'cache-control': [{
key: 'Cache-Control',
value: 'no-cache'
}],
'pragma': [{
key: 'Pragma',
value: 'no-cache'
}],
'content-type': [{
key: 'Content-Type',
value: 'text/html'
}]
};
if (request.uri.startsWith('/js/') === true) {
console.log("js path");
const fs = require('fs');
fs.readFile('js.gz', function(err, data) {
if (err) {
console.log(err);
// prevent caching on errors
const response = {
status: '500',
statusDescription: 'OK',
headers: noCacheHeaders,
body: "",
};
callback(null, response);
} else {
const response = {
status: '200',
statusDescription: 'OK',
headers: noCacheHeaders,//cachedHeaders,
body: data.toString(),
};
callback(null, response);
}
});
return;
}
callback(null, request);
return;
};
【问题讨论】:
-
看起来您是以 text/html 内容类型发送响应,而不是 JSON,不是吗?
-
@xdumaine JSON 是指
response或request对象的序列化传递给callback()并在 CloudFront 调用此函数时从 Lambda 接收。它总是在幕后使用 JSON API,而 CloudFront 不喜欢该文档的格式。
标签: node.js amazon-web-services aws-lambda