【问题标题】:Angular - problem at removing files with Node JS REST APIAngular - 使用 Node JS REST API 删除文件时出现问题
【发布时间】:2021-08-09 09:46:42
【问题描述】:

我正在做一个基于 Angular 的项目。

我有一个来自使用 Node JS 构建的 REST API 的图片列表。我的目标是添加一个允许用户删除图片的功能。我也尝试用 Node JS 来实现它。
这是下面的代码。

节点 JS 控制器:

 const remove = (req) => {
    
      const fileName2 = req.params.photo;
      const directoryPath = "/path/to/uploads/";
    
      fs.unlinkSync(directoryPath+fileName2); // tested with asynchronous method fs.unlink too, same result observed
    
    }; 

Node JS Route 部分:

router.get("/remove/:photo", controller.remove);

Angular 网页:(链接到 ts 控制器以返回图片数组)

<div class="card" style="width: 18rem;" *ngFor="let item of myArray">
  <div class="card-body">
    <h5 class="card-title">{{item.name}}</h5>
    <h6 class="card-subtitle mb-2 text-muted"> <a href="http://IPSERVER:PORT/remove/{{item.name}}">Delete link</a> </h6>
  </div>
</div>

这是部分工作,因为我可以在后端看到位于我的服务器中的图片已被删除。但是在前端有一个奇怪的行为,因为 Angular 网页没有停止加载,我终于得到了那个错误消息:

错误:ENOENT:没有这样的文件或目录,取消链接 '/path/to/upload/picture_M42_20210519_0q3x44b.jpg'

我也想在网页中删除图片,我想了解为什么页面无法停止加载。我该怎么办?

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: node.js arrays angular api rest


    【解决方案1】:

    您永远不会在节点请求处理程序中发送响应,请将其更改为:

    const remove = (req, res) => {
        
        const fileName2 = req.params.photo;
        const directoryPath = "/path/to/uploads/";
        
        fs.unlinkSync(directoryPath+fileName2);
        res.send("File was removed");
        
    }; 
    

    【讨论】:

    • 对不起,我为这个疏忽道歉。非常感谢您的回答!
    • res.send() 不会“打开”页面 - 它发生在客户端,因为您使用链接 (&lt;a href=":.."&gt;) 来执行请求。您可以简单地使用 button 而不是链接,并通过 (click) 处理程序中的角度发送请求。
    • 您只需从myArray 中的.subscribe 中删除元素/项目。
    • 由于您将item.name 传递给函数,您可能需要执行以下操作:const id = this.myArray.findIndex(element =&gt; element.name === item); 还要确保添加对-1 的检查,这基本上意味着找不到索引.
    • 太好了,现在可以完美运行了,非常感谢@eol 的帮助! :)
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2019-01-13
    • 2011-08-24
    • 2013-07-12
    • 2014-07-21
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多