Я использую 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) {...}
вместо функций стрелок - но поведение точно такое же.
Пожалуйста, помогите !!