【发布时间】:2021-02-20 03:43:45
【问题描述】:
我的 lambda 函数偶尔会出现以下错误
{
"errorType": "TypeError",
"errorMessage": "Cannot read property 'data' of null",
"stack": [
"TypeError: Cannot read property 'data' of null",
" at /var/task/app.js:86:21",
" at Timeout._onTimeout (/var/task/node_modules/stripe/lib/utils.js:324:13)",
" at listOnTimeout (internal/timers.js:549:17)",
" at processTimers (internal/timers.js:492:7)"
]
}
我想知道在我的代码中是否有一种方法,如果条带调用失败(我认为这是正在发生的事情),那么我可以重试,否则不知道该怎么做。这是我的代码
// const axios = require('axios')
// const url = 'http://checkip.amazonaws.com/';
const sanityClient = require("@sanity/client");
const client = sanityClient({
projectId: "fdsa...",
dataset: "development",
token: process.env.SANITY_TOKEN_WRITE,
});
const fetch = require("node-fetch");
const stripe = require("stripe")(`${process.env.STRIPE}`);
let response;
/**
*
* Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
* @param {Object} event - API Gateway Lambda Proxy Input Format
*
* Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
* @param {Object} context
*
* Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
* @returns {Object} object - API Gateway Lambda Proxy Output Format
*
*/
exports.lambdaHandler = async (event, context, callback) => {
if (event.httpMethod === "POST") {
response = {
statusCode: 200,
body: JSON.stringify({
message: "hello world",
// location: ret.data.trim()
}),
};
//console.log(event.body);
const payload = JSON.parse(event.body);
async function retrieveProduct() {
const product = await stripe.checkout.sessions.listLineItems(
payload.data.object.id,
{ limit: 5 },
function (err, lineItems) {
console.log(lineItems);
let query;
lineItems.data.map((item) => {
//console.log(item);
//console.log(item.id);
query = `*[_type == "products" && product_id == "${item.price.product}"]`;
//console.log(query);
client.fetch(query, {}).then((documents) => {
//console.log("document");
//console.log(documents);
//console.log(documents[0]._id);
//console.log("document");
documents.forEach((document) => {
client
.patch(document._id) // Document ID to patch
.set({ sold: true }) // Shallow merge
.commit()
.then((result) => {
// console.log(result);
});
});
});
});
}
);
}
async function purchaseRecord() {
const product = await stripe.checkout.sessions.listLineItems(
payload.data.object.id,
{ limit: 5 },
function (err, lineItems) {
//console.log(lineItems);
let arr = [];
lineItems.data.map((item, i) => {
arr.push({
_type: "line_items",
_key: `f83nf893n${i}`,
line_items: item.price.product,
line_items_desc: item.description,
});
//console.log(item);
});
console.log(arr);
const doc = {
_type: "purchases",
cs_id: payload.data.object.id,
customer_id: payload.data.object.customer,
amount_total: payload.data.object.amount_total,
line_items_wrapper: arr,
};
client.create(doc).then((res) => {
console.log(`Purchase was created, document ID is ${res._id}`);
});
}
);
}
purchaseRecord();
retrieveProduct();
}
if (event.httpMethod === "GET") {
try {
// const ret = await axios(url);
response = {
statusCode: 200,
body: JSON.stringify({
message: "hello world",
// location: ret.data.trim()
}),
};
} catch (err) {
console.log(err);
return err;
}
}
callback(null, response);
};
代码在 90% 的时间里运行,但这个错误偶尔会发生。
提前谢谢
【问题讨论】:
标签: node.js amazon-web-services aws-lambda stripe-payments