【发布时间】:2020-04-12 15:56:34
【问题描述】:
我正在使用 Axios 从 API 获取价格(通常为数千),然后想将其存储在 DynamoDB 中。如果我在本地调用 lambda 函数,一切都会按预期工作,但如果我部署该函数并使用 AWS CLI 调用它,它就不再在 DynamoDB 中存储任何值。我在请求中收到的数据以及来自 Axios 调用的响应是相同的。
我不知何故认为这是调用 DynamoDB 的异步函数的范围问题,但我无法解决。期待您的建议。如果您需要更多代码,请告诉我。
updatePrice.js
import { updatePrice } from "./libs/pricing-lib";
import {
success,
failure
} from "./libs/response-lib";
export async function main(event, context) {
try {
let result = await updatePrice(event.pathParameters.id, event.pathParameters.date);
return success(result);
} catch(e) {
return failure(e);
}
}
dynamodb-lib-js
import AWS from "aws-sdk";
export function call(action, params) {
const dynamoDb = new AWS.DynamoDB.DocumentClient();
return dynamoDb[action](params).promise();
}
定价-lib.js
export async function updatePrice(stockid, from) {
try {
let url = getUrl(stockid, from);
const resultEodApi = (await axios.get(url)).data;
resultEodApi.map((price) => {
try {
let priceParams = {
TableName: process.env.pricesTableName,
Item: {
stockid: stockid,
date: price.date,
close: price.close
}
};
dynamoDbLib.call("put", priceParams);
} catch (e) {
return e;
}
});
return true;
} catch (e) {
return e;
}
}
【问题讨论】:
-
TableName: process.env.pricesTableName 看起来很可疑。我会仔细检查你的 YAML 文件中的引用,看看会发生什么,除非这就是你所说的你的表。
-
这只是一种奇怪的表格命名方式。我认为如果这是错误的,本地调用的函数也不会工作,对吧?
标签: node.js aws-lambda amazon-dynamodb serverless