希望在使用 aws lambda 和 api 网关的 nodejs 中以 JSONP 格式而不是 JSON 格式响应

Want response in JSONP format instead of JSON in nodejs using aws lambda and api gateway

想要在使用 aws lambda 和 api 网关的 nodejs 中以 JSONP 格式而不是 JSON 格式响应。 我的 lambda 代码是:

var axios = require("axios");

exports.handler = async (event) => {
  return new Promise((resolve, reject) => {
    var data = JSON.stringify({
      username: event.username,
      password: event.password,
    });
    var config = {
      method: "post",
      url: "http://demo.example.net/v2/api/login",
      headers: {
        "Content-type": "application/json",
      },
      data: data,
    };
    axios(config)
      .then(function (response) {
        const res = {
          statusCode: 200,
          body: "callbackParam([" + JSON.stringify(response.data) + "])",
        };
        resolve(res.body);
      })
      .catch(function (error) {
        const err = {
          statusCode: 401,
          body: error,
        };
        reject(err.body);
      });
  });
};

得到如下响应:

"callbackParam([  {"token":"<token>","expiration": "2022-04-28T08:00:25Z"}])"

任何人都可以帮助我实现将此响应字符串转换为 jsonp 所需的额外内容吗?

我预期的响应是 callbackParam([{}])

我想您只需要用适当的 content-type 和 JavaScript 资源的正文来响应。

您也会成为 explicit promise construction anti-pattern 的牺牲品,所以最好也避免这种情况

exports.handler = async ({ username, password }) => {
  const { data } = await axios.post("http://demo.example.net/v2/api/login", {
    username,
    password,
  });

  return {
    statusCode: 200,
    headers: {
      "content-type": "application/javascript",
    },
    body: `callbackParam(${JSON.stringify([data])})`,
  };
};