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
我创建了一个在 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,其二进制版本将如下所示:
不同的操作系统对换行符的处理方式不同。请参阅 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