Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js fs.createReadStream获得的路径与';他被传进来了_Node.js_Csv_Fs - Fatal编程技术网

Node.js fs.createReadStream获得的路径与';他被传进来了

Node.js fs.createReadStream获得的路径与';他被传进来了,node.js,csv,fs,Node.js,Csv,Fs,我在虚拟机上使用NodeJS。它的一部分提供页面,另一部分是API。我遇到了一个问题,fs.createReadStream尝试访问与传递到函数中的路径不同的路径。我制作了一个小型测试服务器,以查看服务器中是否有其他东西影响path的使用,无论出于何种原因,但它也发生在我的测试服务器上。首先,代码如下: const fs=require('fs'); const path=require('path'); const csv=require('csv-parser'); const readCS

我在虚拟机上使用NodeJS。它的一部分提供页面,另一部分是API。我遇到了一个问题,
fs.createReadStream
尝试访问与传递到函数中的路径不同的路径。我制作了一个小型测试服务器,以查看服务器中是否有其他东西影响
path
的使用,无论出于何种原因,但它也发生在我的测试服务器上。首先,代码如下:

const fs=require('fs');
const path=require('path');
const csv=require('csv-parser');
const readCSV=(文件名)=>{
console.log('READ CSV GOT'+filename);//告诉我你得到了什么
返回新承诺((解决、拒绝)=>{
常数arr=[];
fs.createReadStream(文件名)
.pipe(csv())
.on('data',行=>{
arr.push(世界其他地区);
})
.on('error',err=>{
控制台日志(err);
})
.on('end',()=>{
解决(arr);
});
}
}
//我试过这个:
//const dir=path.relative(
//join('path','to','this','file),
//path.join('path','to','CONTENT.csv'))
// );
//尝试了文字相对路径:
//const dir='../data/CONTENT.csv';
//尝试了文字绝对路径:
//const dir='/repo/directory/server/data/CONTENT.csv';
//尝试了绝对路径:
const dir=path.join(uu dirname,'data','CONTENT.csv');
const content=readCSV(dir)
.then(结果=>{console.log(结果[0]);})
.catch(err=>{console.log(err);});
…但无论我以何种方式对其进行切片,都会得到以下输出:

READCSV-GOT/repo/directory/server/data/CONTENT.csv
抛出器;//未处理的“错误”事件
^
错误:enoint:没有这样的文件或目录,请打开“/repo/directory/data/CONTENT.csv”
i、 例如,
fs.createReadStream
是否出于某种原因剥离了服务器的目录?我想我可能可以将目录硬编码到对createReadStream的调用中?我只是想知道为什么会发生这种情况

另外:我被困在节点v8.11上,不能再高了。在服务器本身上,我相信我使用的是旧的
函数(param){…}
而不是箭头函数——但行为完全相同

请帮助!!

代码工作正常。


我认为您的CONTENT.csv文件应该位于数据文件夹中,如“/repo/directory/data/CONTENT.csv”.

我在回答我自己的问题,因为我找到了一个答案,我不完全确定它为什么工作,至少它很有趣。据我估计,这与调用堆栈有关,NodeJS将其标识为函数调用的来源。我已经在MVC模式中设置了我的服务器,因此我的主
app.js
在根目录中,调用的函数在
/controllers
文件夹中,我一直在尝试从该文件夹中创建相对路径--我仍然不确定绝对路径为什么不起作用

调用堆栈如下所示:

app.js

app.use('/somepath',endpointRouter);
…然后在
endpointRouter.js中:

router.get('/request/file',endpointController.getFile);
…最后在
endpointController.js
中:

const readCSV=filename=>{
//我分享的代码
}
exports.getFile=(请求、恢复、下一步)=>{
//调用readCSV(文件名)的代码
}

…我相信,因为Node将链视为源于
app.js
,所以它会将所有相对路径视为根文件夹中的
app.js
。基本上,当我切换到超级非直观的单点相对路径时:
。/data/CONTENT.csv'
,它不会出现任何问题。

hmm…不确定为什么是我的正在失败,然后--它位于my/data文件夹中。。。