访问CSV文件

时间:2016-12-13 18:35:44

标签: javascript node.js express

有人可以向我解释为什么我在尝试将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。

1 个答案:

答案 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);
        }
    });
});

__dirnameglobal variable,它始终设置为当前执行代码所在的目录(在这种情况下为<full_path_to_the_project_root>/routes/)。