【发布时间】:2026-01-23 03:45:01
【问题描述】:
当我使用本地文件通过 Node 执行此 JavaScript 代码时效果很好,但现在当我在命令行中运行它时,我得到“未定义:1”。
var AWS = require('aws-sdk');
const http = require("http");
AWS.config.update({ region: "us-east-1" });
//cron(0 18 ? * MON-FRI *)
var docClient = new AWS.DynamoDB.DocumentClient();
console.log("Importing Work Orders into DynamoDB Jobs table. Please wait.");
http.get('http://www.MyWebSite.com/Data/WOjson/02152018.json', (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
if (statusCode !== 200) {
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) {
console.error(error.message);
// consume response data to free up memory
res.resume();
return;
}
console.log("Now it is time to parse the file.");
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
});
const parsedData = JSON.parse(rawData);
parsedData.forEach(function(job) {
var params = {
TableName: "Jobs",
Item: {
"userId": job.userId,
"WorkOrder": job.WorkOrder,
"ServiceDate": job.ServiceDate,
"JobType": job.JobType
}
};
// Here is where I post to the DynamoDB table
docClient.put(params, function(err, data) {
if (err) {
console.error("Unable to add job", job.WorkOrder, ". Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("PutItem succeeded:", job.WorkOrder);
}
});
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
我已更新代码以使用 http。 我确实收到控制台日志消息“现在该解析文件了。”,但随后收到消息“未定义:1”并且没有项目进入我的 DynamoDB 表。
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
});
const parsedData = JSON.parse(rawData);
parsedData.forEach(function(job) {
理想情况下,我想按计划(每天下午 6 点执行一次)执行此 lambda 函数,以将远程文件读入我的 DynamoDB 表中。
【问题讨论】:
-
readFileSync 的第二个参数是一个对象,所以它应该是
{encoding: "utf8"}nodejs.org/api/fs.html#fs_fs_readfilesync_path_options 您也可以尝试将其与 JSON.parse 分开,以确保这是导致问题的部分。跨度> -
@JarredOlson - 删除了
fs,因为它似乎不适用于远程文件。我也确实将两个读取分开以隔离问题,但我仍然得到相同的结果。
标签: javascript node.js lambda aws-lambda amazon-dynamodb