3

我正在尝试使用 AWS Lambda 中的 csvtojson 库从 s3 存储桶中读取 CSV,但它无法正常工作。在本地,我的代码有效。但是当我将它上传到 Lambda 时,它不会返回任何内容。Lambda 控制台中没有错误,所以我很难调试。我的代码如下。

const AWS = require('aws-sdk');
const csvtojson = require('csvtojson');

const s3 = new AWS.S3();

const params = {
   Bucket: bucketName,
   Key: pathToFile 
};

const stream = s3.getObject(params).createReadStream();

csvtojson()
   .fromStream(stream)
   .then((json) => {
     console.log('Locally, this returns the CSV as JSON. On Lambda, it does not.');
   });

csvtojson 由于某种原因不能在 Lambda 上工作吗?我应该使用不同的方法来解析 CSV 吗?谢谢!

4

2 回答 2

2

你的 lambda 在 Promise 完成之前就完成了。将最后一节替换为:

const json = await csvtojson().fromStream(stream);
console.log('Locally, this returns the CSV as JSON. On Lambda, it does not.');
于 2019-09-23T22:52:49.957 回答
0

使用 promise 来解决这个问题。

import * as AWS from 'aws-sdk';
const s3 = new AWS.S3();
const csv = require('@fast-csv/parse');


const params = {
    Bucket: 'bucket name',
    Key: 'uploads/img-links.csv'
};

const csvFile = s3.getObject(params).createReadStream();


let csvParsePromise = new Promise((resolve, reject) => {

    const parser = csv.parseStream(csvFile, { headers: true }).on("data", function (data) {
        parser.pause();  // can pause reading using this at a particular row
        console.log('One line from .csv >> ', data);
        parser.resume(); // to continue reading
    }).on("end", function () {
        resolve('csv parse process finished')
    }).on("error", function () {
        reject('csv parse process failed')
    });
});

try { await csvParsePromise; }
catch(err) {
    console.log('an error has occurred');
}```
于 2020-11-30T10:00:36.360 回答