Node.js 如何使用AWS Lambda获取网页并返回正文和标题

Node.js 如何使用AWS Lambda获取网页并返回正文和标题,node.js,aws-lambda,node-fetch,Node.js,Aws Lambda,Node Fetch,我试图使用Lambda函数获取网页,然后返回内容和响应标题。下面是我的代码,当网关API触发时总是返回“Internal server error”(内部服务器错误),我对如何构造响应对象感到困惑,它似乎没有任何关于它的文档。任何打击都是高度赞赏的 const fetch = require('node-fetch'); exports.handler = async (event) => { // TODO implement let r = await fetch('

我试图使用Lambda函数获取网页,然后返回内容和响应标题。下面是我的代码,当网关API触发时总是返回“Internal server error”(内部服务器错误),我对如何构造
响应
对象感到困惑,它似乎没有任何关于它的文档。任何打击都是高度赞赏的

const fetch = require('node-fetch');

exports.handler = async (event) => {
    // TODO implement
    let r = await fetch('http://www.google.com');
    let buffer = await r.buffer();
    const response = {
        statusCode: r.status,
        body: buffer,
        header: r.headers
    };

    return response;
};

我相信您的问题在于您使用的是
response.buffer()
方法。这里应该使用
response.text()
方法。它将以纯文本形式返回响应正文。由于您从响应中获得的标题已经包含
内容类型:text/html
标题,因此您应该能够返回html文档。

感谢您的帮助。将其更改为text()会返回HTML文档,但我的意思是返回的内容类型不仅限于text/HTML。我发现行
header:r.headers
有问题,因为返回的响应不包括从提取返回的任何头。好的,我明白了。可能是从
response.headers
返回的头值是数组。如果您只需要
内容类型
标题,您可以使用
response.headers.get(“content type”)
。那么,经过进一步测试,我似乎无法将
buffer
作为
body
的值,每当我这样做时,它都会返回内部服务器错误,不知您是否也知道原因。谢谢我自己发现的,似乎我必须返回字符串,但可以命令API网关将数据视为二进制: