#javascript #node.js #csv #d3.js
#язык JavaScript #node.js #csv #d3.js
Вопрос:
Я пытаюсь прочитать файл csv d3
в среде узлов. Поэтому я немного сбит с толку, что такое «наилучшая практика»и почему я продолжаю получать 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" amp;amp; 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 (lt;anonymousgt;) at new URL (node:internal/url:632:5)
Ответ №1:
Если файл, на который вы ссылаетесь, недоступен по URL-адресу, то d3.csv
(который использует выборку) не сможет его найти. Внутренне d3.csv
извлекает данные, а затем вызывает d3.csvParse
их для анализа, чтобы вы могли сделать то же самое!
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);
Комментарии:
1. Большое вам спасибо! Мне просто интересно, почему он не может найти файл… Он находится в том же каталоге. Теперь я получаю
TypeError: Only absolute URLs are supported
ответ .