我在正确返回使用无服务器框架部署的Lambda函数的响应时遇到问题:
module.exports.hello = async (event, context, callback) => {
const content = fs.readFileSync('./cn23_template.html', 'utf-8')
const Vue = require('vue')
const app = new Vue({
template: content,
data: function () {
return event
}
})
const renderer = require('vue-server-renderer').createRenderer()
const html = await renderer.renderToString(app)
const browser = await chromium.puppeteer.launch({
// Required
executablePath: await chromium.executablePath,
// Optional
args: chromium.args,
defaultViewport: chromium.defaultViewport,
headless: chromium.headless || true
});
const page = await browser.newPage();
await page.setContent(html);
let pdf = await page.pdf({ pageRanges: '1', format: 'a4', printBackground: true });
await browser.close();
return {
statusCode: 200,
headers: {
'Content-Type': 'application/pdf',
'Content-Length': pdf.length
},
body: pdf ? pdf.toString('base64') : null,
isBase64Encoded: true
}
}
我的serverless.yml
文件:
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: post
integration: lambda
response:
headers:
Content-Type: "'Test'"
Cache-Control: "'max-age=120'"
问题是我从函数返回的内容未正确映射到响应。响应不包括statusCode
和headers
,它只使用整个返回的对象作为响应的主体。
除此之外,也不会使用.yml中配置的标头。
这似乎是一个非常愚蠢的错误,但是我只是在做Serverless API gateway docs内部的内容。
所以我的问题是:如何正确配置响应属性,以使HTTP请求使用无服务器框架给出正确的响应?