开发者问题收集

TypeError:无法读取未定义的属性“长度”-在节点 js 中使用 csv2geojson

2017-06-27
712

我在 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个回答

您应检查调用 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);
    });
});
Pat Needham
2017-06-27

尝试以下代码:

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 变量,结果是转换数据的结果。

谢谢!

Chenglong Wei
2017-06-27