【发布时间】:2020-02-18 18:16:52
【问题描述】:
我在虚拟机上使用 NodeJS。它的一部分提供页面,另一部分是 API。我遇到了一个问题,fs.createReadStream 尝试访问与传递给函数的路径不同的路径。我制作了一个小型测试服务器,以查看服务器中是否有其他东西影响path 的使用,无论出于何种原因,但它也发生在我的测试服务器上。首先,这是代码:
const fs = require('fs');
const path = require('path');
const csv = require('csv-parser');
const readCSV = (filename) => {
console.log('READ CSV GOT ' + filename); // show me what you got
return new Promise((resolve, reject) => {
const arr = [];
fs.createReadStream(filename)
.pipe(csv())
.on('data', row => {
arr.push(row);
})
.on('error', err => {
console.log(err);
})
.on('end', () => {
resolve(arr);
});
}
}
// tried this:
// const dir = path.relative(
// path.join('path', 'to', 'this', 'file),
// path.join('path', 'to', 'CONTENT.csv')
// );
// tried a literal relative path:
// const dir = '../data/CONTENT.csv';
// tried a literal absolute path:
// const dir = '/repo/directory/server/data/CONTENT.csv';
// tried an absolute path:
const dir = path.join(__dirname, 'data', 'CONTENT.csv');
const content = readCSV(dir)
.then(result => {console.log(result[0]);})
.catch(err => {console.log(err);});
...但是无论如何我都会得到以下输出:
READCSV GOT /repo/directory/server/data/CONTENT.csv
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open '/repo/directory/data/CONTENT.csv'
即,fs.createReadStream 是否出于某种原因以某种方式剥离了服务器的目录?我想我可以将目录硬编码到对 createReadStream 的调用中,也许?我只想知道为什么会这样。
一些额外的:我被困在节点 v8.11 上,不能再高了。在服务器本身上,我相信我使用的是较旧的 function(param) {...} 而不是箭头函数——但行为完全相同。
请帮忙!!
【问题讨论】: