【问题标题】:Express delete-route not working with angular applicationsExpress delete-route 不适用于 Angular 应用程序
【发布时间】:2021-01-19 19:47:12
【问题描述】:

不知何故删除(和放置/修补)路由永远不会起作用。它们在使用邮递员进行测试时工作正常,但从我的角度应用程序调用时却没有。

//calling delete route from angular application. this does not work
DeleteDay(){
    this.http.delete("http://192.168.1.102:3000/api/5f7a391013cbd02ea001fb82");
}


//delete route from server
router.delete('/:postId', async (req, res) => {
try{
    const removedPost = await Dag.findByIdAndDelete({ _id: req.params.postId });
    res.json(removedPost);
} catch(err) {
    res.json({ message: err });
}
});

//使用邮递员调用删除。这确实有效 screen from postman

【问题讨论】:

  • 当我使用 python 调用删除路由时,如果工作正常。
  • 您的浏览器控制台/网络选项卡说什么?因为我打赌你忘了实现options 处理程序。与 curl、postman、python 或任何其他非浏览器不同,浏览器首先发送一个 OPTIONS 请求,以查看甚至允许哪个动词。 (这称为preflight request)如果没有响应,他们甚至不会发送 POST/PUT/DELETE 请求。
  • 您可能需要返回 CORS 标头(如果您使用的是 express,请参阅 expressjs.com/en/resources/middleware/cors.html

标签: node.js angular typescript express postman


【解决方案1】:

HttpClient 发出 HTTP 请求时,它返回一个需要订阅的Observable。这同样适用于邮递员,但在 Angular 中使用它时,您需要通过以下方式订阅它:

import {HttpClient} from '@angular/common/http';
constructor(private http:HttpClient){}
//your function
DeleteDay(id:string){
console.log("id could be made dynamic",id);//5f7a391013cbd02ea001fb82
this.http.delete("http://192.168.1.102:3000/api/"+id) 
    .subscribe((data)=>{ 
      console.log(data); //data will actually be an Object sent from Express
    })
}

PS:我已将您的功能更改为即使在动态 ID 上也可以使用,请根据您的需要使用它。

【讨论】:

  • 这解决了我的问题。我认为订阅是可选的。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多