我是使用express / node.js的新手,我只是想知道如何将节点发送到前端的响应(我在前端使用Angular)。
Node.js基本上读取一个目录并记录其中的所有文件,这里是代码:
服务器
router.get('/files/:id/', function(req, res)
{
let fileUrl = path.join(SERVER, 'files', sanitizeFileName(req.params.id));
fs.readdir(fileUrl, (err, files) => {
files.forEach(file => {
console.log(file);
res.send(file);
});
})
});
现在我需要在前端显示文件名,有点像:
前端
<div class="files">
<p>Files in {{ id }} directory:</p>
<p>>{{ file }}</p>
</div>
我在前端尝试了这个方法,但由于某种原因我得到了一个空对象
this.file = this.http.request(this.server).map( (file:any) => { JSON.parse(file) } );
答案 0 :(得分:0)
您需要在Angular项目中创建服务并在Postman测试API后获取网址(示例 - http://localhost:3000/api/users)
答案 1 :(得分:0)
fs.readdir(fileUrl, (err, files) => {
files.forEach(file => {
console.log(file);
res.send(file);
});
})
您无法多次回复请求。这只能做一次。
最好是尝试在数组中推送文件名并将其发送到前端并在那里填充。
将其更改为
fs.readdir(fileUrl, (err, files) => {
var filenames = [];
files.forEach(file => {
filenames.push(file);
});
res.status(200).send(filenames);
})
答案 2 :(得分:0)
正如krishnashu指出的那样,不可能使用res.send发送多个响应(尽管可以使用res.write和res.end链接响应)。
我建议您一次发送整个文件数组,而不是使用foreach遍历数组。只要您不想在此阶段修改文件,就不需要这样做。
您只需将数组转换为JSON样式的字符串并将其返回给客户端应用程序:
res.json(JSON.stringify(files))