导出 PapaParse 函数的问题
Issues with exporting PapaParse function
我是 JavaScript 和 Node 的新手,正在为我的第一个应用程序进行概念验证。我的目标是:
- 解析 CSV 文件(因为我想要的数据太小,无法保证数据库)
- 将解析后的数据加载到数组中
- 在数组中搜索特定的 'Date',其中还有两个我可以从中提取数据的字段
- 将该数据作为导出函数呈现(如果不准确,请原谅我的措辞)
在以前同事的帮助下,我发现 PapaParse
和 lodash
可以帮助解析数据并进行搜索。如果我在同一个应用程序中调用该函数,该应用程序运行良好。当我尝试导出函数时,我没有得到任何结果。两周以来,我一直在尝试自己解决这个问题,希望有人能帮助我。
filename: newFOTD.js
var papa = require('papaparse');
var _ = require('lodash');
var fs = require('fs');
var csvfile = '../data/flavorDB.csv';
function flavorOfTheDay(date) {
papa.parse(fs.createReadStream(csvfile), {
header: true,
delimiter: ",",
complete: function(results) {
var match = _.filter(results.data, _.matches({'Date': (date)}));
match.forEach(function (flavorDB) {
if (flavorDB.Note.length != "") { /* eslint-disable no-console */
console.log("Today's flavor is " + flavorDB.Flavor + ". Did you know that today is also " + flavorDB.Note + "? How cool!");
} else console.log(flavorDB.Flavor);
})
}
})
}
flavorOfTheDay('2018-08-09');
module.exports.flavorOfTheDay = flavorOfTheDay
以上效果很好。当我尝试访问导出的函数时,没有返回任何数据。
filename: program.js
var test = require('./lib/newFOTD');
test.flavorOfTheDay('07-08-2018')
我一定是在使用 Papaparse 时做错了什么,无法弄清楚它是什么。我可以在 Papaparse 逻辑之外的 flavorOfTheDay
函数中放置一个简单的 console.log(date)
,当我从 'program.js'
调用该函数时,我将获得传回的 date
数据在控制台中。
我将不胜感激任何帮助或指出我正确的方向。我原以为是一个简单的测试,可以让我继续进行概念验证的下一阶段,结果却变成了失眠和令人沮丧的几周,哈哈。谢谢你。
我认为@MukeshSharma 想表达的是:由于您的函数是异步的,因此在调用 flavorOfTheDay()
函数时必须提供回调函数。就像您在第一个代码片段中所做的那样:flavorOfTheDay('07-12-2018', doStuff)
--> doStuff 是您的回调函数。
将上面的示例修改为匿名回调函数:
filename: program.js
var test = require('./lib/newFOTD');
test.flavorOfTheDay('07-08-2018', function(date, data) {
// do whatever you like with your data here
console.log(date);
console.log(data);
})
PapaParse 的问题是我如何声明用于解析的 CSV 文件的变量并需要使用 path
来使其工作。
正确的方法
filename: newFOTD.js
var path = require('path');
var csvfile = path.join(__dirname, '..', 'data', 'flavorDB.csv');
INCORRECT/ORIGINAL 方式
filename: newFOTD.js
var csvfile = '../data/flavorDB.csv';
感谢David Boskovic for helping answer, what I thought was an issue with the PapaParse code. Once I thought it was an issue with code I opened an issue on Github. Calling Papaparse as an exported module not returning data。
我是 JavaScript 和 Node 的新手,正在为我的第一个应用程序进行概念验证。我的目标是:
- 解析 CSV 文件(因为我想要的数据太小,无法保证数据库)
- 将解析后的数据加载到数组中
- 在数组中搜索特定的 'Date',其中还有两个我可以从中提取数据的字段
- 将该数据作为导出函数呈现(如果不准确,请原谅我的措辞)
在以前同事的帮助下,我发现 PapaParse
和 lodash
可以帮助解析数据并进行搜索。如果我在同一个应用程序中调用该函数,该应用程序运行良好。当我尝试导出函数时,我没有得到任何结果。两周以来,我一直在尝试自己解决这个问题,希望有人能帮助我。
filename: newFOTD.js
var papa = require('papaparse');
var _ = require('lodash');
var fs = require('fs');
var csvfile = '../data/flavorDB.csv';
function flavorOfTheDay(date) {
papa.parse(fs.createReadStream(csvfile), {
header: true,
delimiter: ",",
complete: function(results) {
var match = _.filter(results.data, _.matches({'Date': (date)}));
match.forEach(function (flavorDB) {
if (flavorDB.Note.length != "") { /* eslint-disable no-console */
console.log("Today's flavor is " + flavorDB.Flavor + ". Did you know that today is also " + flavorDB.Note + "? How cool!");
} else console.log(flavorDB.Flavor);
})
}
})
}
flavorOfTheDay('2018-08-09');
module.exports.flavorOfTheDay = flavorOfTheDay
以上效果很好。当我尝试访问导出的函数时,没有返回任何数据。
filename: program.js
var test = require('./lib/newFOTD');
test.flavorOfTheDay('07-08-2018')
我一定是在使用 Papaparse 时做错了什么,无法弄清楚它是什么。我可以在 Papaparse 逻辑之外的 flavorOfTheDay
函数中放置一个简单的 console.log(date)
,当我从 'program.js'
调用该函数时,我将获得传回的 date
数据在控制台中。
我将不胜感激任何帮助或指出我正确的方向。我原以为是一个简单的测试,可以让我继续进行概念验证的下一阶段,结果却变成了失眠和令人沮丧的几周,哈哈。谢谢你。
我认为@MukeshSharma 想表达的是:由于您的函数是异步的,因此在调用 flavorOfTheDay()
函数时必须提供回调函数。就像您在第一个代码片段中所做的那样:flavorOfTheDay('07-12-2018', doStuff)
--> doStuff 是您的回调函数。
将上面的示例修改为匿名回调函数:
filename: program.js
var test = require('./lib/newFOTD');
test.flavorOfTheDay('07-08-2018', function(date, data) {
// do whatever you like with your data here
console.log(date);
console.log(data);
})
PapaParse 的问题是我如何声明用于解析的 CSV 文件的变量并需要使用 path
来使其工作。
正确的方法
filename: newFOTD.js
var path = require('path');
var csvfile = path.join(__dirname, '..', 'data', 'flavorDB.csv');
INCORRECT/ORIGINAL 方式
filename: newFOTD.js
var csvfile = '../data/flavorDB.csv';
感谢David Boskovic for helping answer, what I thought was an issue with the PapaParse code. Once I thought it was an issue with code I opened an issue on Github. Calling Papaparse as an exported module not returning data。