【问题标题】:node.js & express - Send Response From Back End To Front Endnode.js & express - 从后端发送响应到前端
【发布时间】:2018-11-02 04:31:18
【问题描述】:

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

【问题讨论】:

  • 文件是什么类型的对象:对象数组?架构是什么?

标签: node.js angular typescript express


【解决方案1】:

您需要在 Angular 项目中创建服务并在 Postman 测试 API 后获取 url(example-http://localhost:3000/api/users)

【讨论】:

  • 我已经有了 URL,我从后端读取了文件名。为什么需要创建服务将文件名作为字符串发送到前端?
  • 通过 Expressjs 和 nodejs,您刚刚创建了一个 API,现在如果您想创建 Angular 项目,那么它必须包含一个服务,该服务具有其所有 get、post、put、delete 方法并将这些方法对象用于你的组件来创建 UI
【解决方案2】:
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);
      })

【讨论】:

  • 如果您使用的是类型脚本,那么您可能需要添加 var filenames:string[];
  • 它说 TypeError: Cannot read property 'push' of undefined in the server log
【解决方案3】:

正如 krishnashu 指出的那样,无法使用 res.send 发送多个响应(尽管可以使用 res.write 和 res.end 链接响应)。

我建议您一次发送整个文件数组,而不是使用 foreach 遍历数组。只要您不想在此阶段修改文件,就无需这样做。

您可以简单地将数组转换为 JSON 样式的字符串并将其返回给客户端应用程序: res.json(JSON.stringify(files))

【讨论】:

  • 谢谢!我究竟如何在前端获取它们?它会自动执行吗?
猜你喜欢
  • 2022-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多