Netlify Lambda 函数
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 announced in April (2018) that Node.js 8.10 将是 Netlify 函数中的默认值。
使用回调参数:
当您需要 return 使用回调参数 Lambda functions on Netlify
中的错误时,它的格式与 AWS 的 Lambda 函数相同。
您将需要 return 在 callback
的第一个参数中出现错误,如您在 AWS documentation
中所见
callback(Error error, Object result);
如果不为空,则使用error
,结果将被忽略。
使用异步处理程序:
您还可以选择 return 在响应中使用错误状态代码的错误,如下面的示例函数。
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: ''
}
然后将其传递给回调 return 错误
response.body = 'some error text here';
callback(response);
他们正在使用 AWS Lambda,因此如果您可以在控制台中执行此操作,理论上您应该能够以相同的方式调用事物,因为他们正在获取您的代码并通过 Cloudformation 将其部署到他们的基础设施中。
我在调用 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 announced in April (2018) that Node.js 8.10 将是 Netlify 函数中的默认值。
使用回调参数:
当您需要 return 使用回调参数 Lambda functions on Netlify
中的错误时,它的格式与 AWS 的 Lambda 函数相同。
您将需要 return 在 callback
的第一个参数中出现错误,如您在 AWS documentation
callback(Error error, Object result);
如果不为空,则使用error
,结果将被忽略。
使用异步处理程序:
您还可以选择 return 在响应中使用错误状态代码的错误,如下面的示例函数。
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: ''
}
然后将其传递给回调 return 错误
response.body = 'some error text here';
callback(response);
他们正在使用 AWS Lambda,因此如果您可以在控制台中执行此操作,理论上您应该能够以相同的方式调用事物,因为他们正在获取您的代码并通过 Cloudformation 将其部署到他们的基础设施中。