Netlify Lambda Functions



当我调用Netlify函数时,返回502错误时遇到问题。我的Axios调用中是否有错误,或者回调中发送的"错误"是否需要是实际的error对象?

下面是我的函数示例:

const axios = require('axios')
require('dotenv').config()
const https = require('https')
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type'
}
exports.handler = function (event, context, callback) {
// your server-side functionality
axios
.post(
`https://us18.api.mailchimp.com/3.0/lists/${
process.env.LIST_ID
}/members/`, {
email_address: 'deuce3608@gmail.com',
status: 'subscribed'
}, {
auth: {
username: 'admin',
password: process.env.MAILCHIMP_API_KEY
}
}
)
.then(response => {
callback(null, {
statusCode: 200,
headers,
body: response.data
})
})
.catch(err => {
callback(JSON.stringify(err.response.data))
})
}

Netlify在2018年4月宣布Node.js 8.10将是Netlify函数中的默认值。

使用回调参数:

当您需要使用回调参数在Lambda functions on Netlify中返回错误时,其格式将与AWS的Lambda函数相同。

您需要在callback的第一个参数中返回错误,如您在AWS文档中所见

callback(Error error, Object result);

如果不为null,则使用error,结果将被忽略。

使用异步处理程序:

您还可以选择在响应中返回带有错误状态代码的错误,如下面的示例函数。

import fetch from "node-fetch";
const API_ENDPOINT =
"https://08ad1pao69.execute-api.us-east-1.amazonaws.com/dev/random_joke";
exports.handler = async (event, context) => {
return fetch(API_ENDPOINT)
.then(response => response.json())
.then(data => ({
statusCode: 200,
body: `${data.setup} ${data.punchline} *BA DUM TSSS*`
}))
.catch(error => ({ statusCode: 422, body: String(error) }));
};

显示简单测试

错误

exports.handler = function(event, context, callback) {
const err = new Error("this is an error")
callback(err);
}

响应(响应状态代码502(:

{"errorMessage":"this is an error","errorType":"Error","stackTrace":["48.exports.handler (/var/task/showerror.js:75:13)"]}

对象

exports.handler = function(event, context, callback) {
const err = {statusCode: 422, body: "this is an error"}
callback(err);
}

响应(响应状态代码502(:

{"errorMessage":"[object Object]"}

字符串

exports.handler = function(event, context, callback) {
const err = "this is an error"
callback(err);
}

响应(响应状态代码502(:

{"errorMessage":"this is an error"}

注意:

如果您想使用回调并在响应中包含错误状态代码,只需将其作为对象传递给响应即可。

exports.handler = function(event, context, callback) {
const err = {statusCode: 422, body: "this is an error"}
callback(null, err);
}

响应(响应状态代码422(:

this is an error

您可以这样安排响应:

var response = {
statusCode: 4xx
body: ''
}

然后将其传递给回调以返回错误

response.body = 'some error text here';
callback(response);

他们使用的是AWS Lambda,所以如果你能在控制台中完成这项工作,理论上你应该能够以同样的方式调用,因为他们正在获取你的代码,并通过Cloudformation在他们的基础设施中部署它。

相关内容

  • 没有找到相关文章

最新更新