有人可以向我解释为什么我在尝试将csv传入./vacancy-data.csv cannot be found
npm包时遇到csvtojson
错误吗?
csv与以下代码位于同一目录中:
var express = require('express'),
router = express.Router(),
Converter = require("csvtojson").Converter;
router.get('/search',function(req,res){
var converter = new Converter({});
converter.fromFile('./vacancy-data.csv',function(err,result){
if (err) {
console.log(err)
} else {
console.log(result);
}
});
});
我已经尝试了require('./vacancy-data.csv')
,还尝试了better-require
npm包。
我试图将csv转换为json,然后在响应中传递json。
答案 0 :(得分:1)
我想这可能是因为require
函数有自己的resolving strategy,这不适用于通常的nodejs fs
命令。例如,考虑这个结构:
-> index.js
-> routes/
-> router.js
-> vacancy-data.csv
要解决require('./vacancy-data.csv')
中的./routes/router.js
,NodeJS将从当前模块路径开始查看,在这种情况下为./routes/
。
但是,当您运行node index.js
然后发出HTTP请求时,您的网络服务器的当前目录将为./
,并将用于解析converter.fromFile('./vacancy-data.csv')
。尝试:
var express = require('express'),
router = express.Router(),
Converter = require("csvtojson").Converter,
path = require('path');
router.get('/search',function(req,res){
var converter = new Converter({});
converter.fromFile(path.join(__dirname, 'vacancy-data.csv'),function(err,result){
if (err) {
console.log(err)
} else {
console.log(result);
}
});
});
__dirname
是global variable,它始终设置为当前执行代码所在的目录(在这种情况下为<full_path_to_the_project_root>/routes/
)。