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

标签 javascript node.js csv d3.js

我正在尝试使用 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/

相关文章:

javascript - 如何更改两个不同类中的两个 id css

node.js - 解析node.jsexpress应用程序,形成enctype ="multipart/form-data"破坏请求体?

javascript - 在三元运算符内不执行任何操作

javascript - 风格 react 路由器事件链接

javascript - Chrome.webNavigation.onBeforeNavigate 无法读取未定义的属性 'callback'

javascript - Joomla 3 无法将 &lt;script&gt; 添加到文章

node.js - 端口转发不适用于 Nodejs 应用程序

mysql - 将固定值添加到从 csv 文件加载数据的 Mysql 中的列

python - 搜索 csv 文件,这是最佳实践?

javascript - 从 .csv 文件读取的内容有时不会在页面加载时显示