node.js& express - 从后端到前端发送响应

时间:2018-05-23 08:59:49

标签: node.js angular typescript express

我是使用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) } );

3 个答案:

答案 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))