TypeError:无法读取属性' length'未定义 - 在节点js中使用csv2geojson

时间:2017-06-27 00:48:31

标签: javascript json node.js geojson

我在node.js应用中使用csv2geojson模块来读取csv文件并最终将其解析为geojson。但是在运行我的应用程序时会在标题中出现错误。

以下是运行代码的错误:

var csv2geojson = require('csv2geojson');
var fs = require('fs');

var csvfile = fs.readFile(__dirname + '/../public/json/locations/wireless-locs.csv', 'utf8');
var geoJson = csv2geojson.csv2geojson(csvfile, function(err, results) {
 console.log(geoJson);
});

控制台出错:

/Users/../../../sites/node/app/node_modules/csv2geojson/index.js:109
    if (!parsed.length) {
           ^

TypeError: Cannot read property 'length' of undefined

我的csv文件示例:

LAT LON NAME    TIME    CELL_ID
-32.62678025    151.39455296    LOC1    2017-06-14  1234
-37.80774968    140.72863036    LOC2    2017-06-14  1235

2 个答案:

答案 0 :(得分:0)

请尝试以下代码:

var csv2geojson = require('csv2geojson');
var fs = require('fs');

var csvfile = fs.readFileSync(__dirname + '/../public/json/locations/wireless-locs.csv', 'utf8');
console.log(csvfile);
var geoJson = csv2geojson.csv2geojson(csvfile, function(err, results) {
     console.log(results);
});

您的代码有两个问题:

一个是您正在使用异步读取文件功能,您需要将其更改为同步版本或在回调函数中编写以下代码。

另一个是你应该记录结果而不是geoJson变量,结果是转换数据的结果。

谢谢!

答案 1 :(得分:0)

调用fs.readFile时,您应该检查是否有任何错误。你可以通过修改函数调用来包含一个包含errordata参数的回调来做到这一点:

fs.readFile(__dirname + '/../public/json/locations/wireless-locs.csv', 'utf8', (err, data) => {
    if (err) throw err;
    var geoJson = csv2geojson.csv2geojson(data, function(err, results) {
        if (err) throw err;
        console.log(results);
    });
});