async csv到nodejs中的JSON数据输出

时间:2018-03-03 02:55:05

标签: javascript node.js mongodb express

我对nodejs中的promises有一个可怕的误解。 我在模块中有一个函数将CSV转换为JSON:

const URL_01 = `${__dirname}/URL/some_CSV.csv`;

const fs = require('fs'),
  Converter = require('csvtojson').Converter,
  converter = new Converter({}),

  convertToJson = function(file) {
    return new Promise( (res, rej) => {
      converter.on("end_parsed", (jsonData) => {
        if(!jsonData){
          rej("CSV to JSON conversion failed!")
        }
        res(jsonData);
      });
      fs.createReadStream(file).pipe(converter);
    });
  };

export default convertToJson;

然后我需要在server.js中使用CSVfile_URL启动函数convertToJson并将其保存到mongo db,现在没有输出数据:

    app.get('/all', async (req, res) => {
  const data = await convertToJson( URL_01 );
  res.send(data);
});

谁能帮助我?

2 个答案:

答案 0 :(得分:0)

夫妻问题:

  1. 您正在将ES2015模块语法与CommonJS语法混合使用。
  2. 根据模块here的文档,您似乎没有正确使用csvjson
  3. 话虽如此,使用this回答,这样的事情可能有效(未经测试):

    const fs = require('fs')
    const csv = require('csvtojson')
    
    const URL_01 = `${__dirname}/URL/some_CSV.csv`;
    
    module.exports = file => new Promise((resolve, reject) => {
      const promises = []
      csv()
        .fromFile(URL_01)
        .on('json', converted => promsies.push(Promise.resolve(converted)))
        .on('done', error => {
          if (error) {
            reject(error)
            return
          }
        Promise.all(promises).then(convertedResults => resolve(convertedResults))
      })
    })
    

答案 1 :(得分:0)

您可能要使用NPM提供的现成async-csv软件包。这将很简单:

const csv = require('async-csv');
let parsedObject = await csv.parse(csvFileAsString);