Рекомендации по чтению данных csv с помощью d3 в узле. Зачем вводить ошибку типа?

#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 ответ .