gpt4 book ai didi

javascript - 在 Node 中使用 d3 读取 csv 数据的最佳实践。为什么会出现 TypeError?

转载 作者:行者123 更新时间:2023-12-05 00:38:04 25 4
gpt4 key购买 nike

我正在尝试使用 d3 读取 csv 文件在 Node 环境中。因此,我有点困惑“最佳实践”方式是什么以及为什么我不断获得 TypeError .
我知道对于 d3 的某些模块支持 fetch 的环境必须在场。因此,我目前的代码如下所示:

import * as d3 from "d3";
import fetch from "node-fetch";
global.fetch = fetch;

let data_path = "flightCodes.csv";


// would a d3.csvParse(fs.readFileSync(data_path)) be better?
let data = await d3.csv(data_path, function (err, dat) {
if (err) {
console.log(err);
} else {
console.log(dat);
}
});

console.log(data);
csv 文件位于同一文件夹中,如下所示:
orig,dest,orig_codes,dest_codes
Paris,Lyon,"BVA, ORY, CDG",LYS
Paris,Bordeaux,"BVA, ORY, CDG",BOD
Paris,Nantes,"BVA, ORY, CDG",NTE
Madrid,Barcelona,MAD,BCN
Lisboa,Porto,LIS,OPO
我的 package.json看起来像这样:
{
"name": "name",
"version": "1.0.0",
"description": "",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"d3": "^7.2.0",
"d3-fetch": "^3.0.1",
"node-fetch": "^3.1.0"
}
}
当我做 node script.js ,我得到以下信息,但我不完全明白为什么。有人可能有想法吗?
node:internal/errors:464
ErrorCaptureStackTrace(err);
^

TypeError [ERR_INVALID_URL]: Invalid URL
at new NodeError (node:internal/errors:371:5)
at onParseError (node:internal/url:552:9)
at parse (<anonymous>)
at new URL (node:internal/url:632:5)

最佳答案

如果您引用的文件无法通过 URL 获得,则 d3.csv (使用 fetch)找不到它。在内部,d3.csv fetches the data然后调用d3.csvParse解析它。获取数据需要外部 URL,因此您无法引用本地文件。
但是,您可以使用 fs模块在本地读取文件然后调用d3.csvParse得到与 d3.csv 相同的结果做!

let data = d3.csvParse(fs.readFileSync(data_path));

此外,您的代码还有另一个问题。签名 d3.csv(path, callback)已弃用。相反,它将在每一行上执行第二个参数作为解析函数。正确的调用方式是 d3.csv(path).then(callback)或者
const data = await d3.csv(path);
callback(data);

关于javascript - 在 Node 中使用 d3 读取 csv 数据的最佳实践。为什么会出现 TypeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70294961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com