Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用node.js cdv解析器将csv数据之一放入变量中?_Node.js_Csv - Fatal编程技术网

如何使用node.js cdv解析器将csv数据之一放入变量中?

如何使用node.js cdv解析器将csv数据之一放入变量中?,node.js,csv,Node.js,Csv,我正在尝试使用node.js的CSV解析器从CSV中提取数据 readGreetingData的结果是: 应为:return='Good night' 实际值:return=blank 问题在于: const response显示在parser.on('end',()=>{方法中 但转义该方法后,const response变为空白 如何改进此功能 const fs = require('fs'); const csv = require('csv'); const path = re

我正在尝试使用
node.js
CSV解析器从
CSV
中提取数据

readGreetingData
的结果是:

  • 应为:
    return='Good night'
  • 实际值:
    return=blank
问题在于:

  • const response
    显示在
    parser.on('end',()=>{
    方法中
  • 但转义该方法后,
    const response
    变为空白
如何改进此功能

const fs = require('fs');
const csv = require('csv');

const path = require('path');
const filename = '../data/greeting.csv';
const greetingPath = path.join(__dirname, filename);

module.exports = class greeting {
  constructor() {
    this.whatTime = 'midnight';
    this.greetingPattern = this.readGreetingData(this.whatTime);
    console.log('this.greetingPattern= ' + this.greetingPattern);
  }


  //@param: whatTime --> 'midnight'
    readGreetingData(whatTime) {
    const parser = csv.parse({ columns: true });
    const readableStream = fs.createReadStream(greetingPath, { encoding: 'utf-8' });
    readableStream.pipe(parser);

    const response = [];
    let result = '';
    let data;

    parser.on('readable', () => {
      while (data = parser.read()) {
      }
    });

    parser.on('data', (data) => {
      while (data = parser.read()) {
        if (data['Time'] === whatTime) {
          response.push(data.Greeting);
          break;
        }
      }
    });

    parser.on('end', () => {
     result = response[0];
     console.log(result);
     return result;
    });

    console.log(result);
    return result;
  }
}
CSV如下所示

"No","Time","Greeting"
"1","midnight","Good night"

提前感谢您!

这个问题有两种解决方案,您可以使用异步/等待模式来解决这个问题,但是,只要文件不是海量的,根据您的需要使用同步API可能会更简单(异步构造函数不是一个好主意)

因此,您可以像这样完成您需要的:

const fs = require('fs');
const csv = require('csv/lib/sync');
const path = require('path');
const filename = '../data/greeting.csv';
const greetingPath = path.join(__dirname, filename);

module.exports = class greeting {

    constructor() {
        this.whatTime = 'midnight';
        this.greetingPattern = this.readGreetingData(this.whatTime);
        console.log('this.greetingPattern = ' + this.greetingPattern);
    }

    readGreetingData(whatTime) {
        const records = csv.parse(fs.readFileSync(greetingPath), { columns: true });
        const result = records.find(record => record.Time === whatTime);
        return (result || {} ).Greeting;
    }
}

感谢您友好地回答我的问题。我尝试了上述代码,但似乎显示了这样的消息:
TypeError:records.find不是一个函数。您能告诉我如何修复此消息吗?除此之外,我认为我对node.js的理解还不够……如果您知道,您可以共享好书、文档或URL吗?嗨@Yoshi,谢谢你测试我的代码。我相信我们可以解决这个错误。你能确保你使用的是const csv=require('csv/lib/sync');而不是require('csv')吗,接口不同!有一些很棒的Node.js指南,W3Schools有一个:,还有官方文档:。还有:。如果我能给你一些建议,devs learning Node.js最大的问题就是语言的异步性。一旦你明白你会喜欢它的!嗨@Terry!它终于成功了!!!我真的很感激它。感谢您提供了大量有用的信息。我将利用您的信息努力学习。现在,我从理解JS异步和同步本质的区别开始。有一天,我想成为像您一样的开发人员!再次感谢:)嘿@Yoshi,没问题,祝你学习顺利!如果我能再给你一条建议:每天学习,你会越来越好。我从未停止过学习,也(希望)永远不会停止!