Express App 仅在 Windows 上显示 JSON,不显示 Debian 或 Heroku

Express App Only Display JSON on Windows, Not Debian or Heroku

我创建了一个在 Windows 上成功显示 JSON 的快速应用程序 - 我在 Firefox 或 Chrome 上没有遇到任何问题。 但是,当我尝试在我的 linux 设置 (Debian) 上 运行 相同的代码或在 Heroku 上部署它时,收到一个空数组:[]。 我怎样才能让它显示在 windows 以外的地方? 这是 js 文件:

var express = require('express');
var router = express.Router();
var fs = require('fs');

//read file of chore todos
function readCSV(callback) {
  fs.readFile('./data/todoList.csv', function(err, data) {
    if(err) throw err;
    var dataStr = data.toString();
    var array = dataStr.split("\n");
    fs.writeFileSync('./data/todo.json', JSON.stringify(convertToJSON(array), null, 4));
    var temp = convertToJSON(array);
    return callback(temp);
  });
}

//convert array to JSON
function convertToJSON(array) {
  var rows = array.toString();
  rows = rows.split("\r");
  for (var i=1; i<rows.length;i++) {
    rows[i] = rows[i].replace(rows[i][0], "");
  }
  var asJSON = [];
  // get column headers
  var headers = rows[0].split(",");
  
  for (var i=1; i<rows.length-1; i++) {
    var obj = {}
    var currentRow = rows[i].split(",");

    for (var j=0; j<headers.length; j++) {
      obj[headers[j]] = currentRow[j];
    }
    asJSON.push(obj);
  }
  return asJSON;
}

var returnJSON;
readCSV(function(temp) {
  returnJSON=temp;
})

router.get('/', function (req, res, next) {
  res.json(returnJSON);
});

module.exports = router;

问题是由 convertToJSON() 函数中的以下行引起的

rows = rows.split("\r");

考虑在 windows.

中创建的以下 csv 文件

及其二进制表示:

你会注意到换行符用“\r\n”或CR LF字符表示

如果在 Linux 中创建相同的 csv,其二进制版本将如下所示: 这里换行符用“\n”或LF字符表示。

不同的操作系统对换行符的处理方式不同。请参阅 https://en.wikipedia.org/wiki/Newline 了解更多详情。

要使其适用于 Linux,您可以更改为以下内容

rows = rows.split("\n");

但是,这不适用于 windows。

How can I get it to display on more than just windows?

使用 csvtojson 来处理像这样的边缘情况和大部分繁重的工作。但是,如果您想自己处理它,您可以在此处查看包如何处理它

https://github.com/Keyang/node-csvtojson/blob/master/src/getEol.ts