簡體   English   中英

當我使用 Postman 對其進行測試時,function 可以工作,但在我的客戶端上不起作用

[英]A function works when I test it with Postman, but doesn't work from my client

我的客戶端中有一個按鈕,需要根據 ID 從 MongoDB 集合中刪除文檔。 這是它在后端的樣子:

index.js:

router.post('/deletetask', async function (req, res, next) {
  let result = await dbModule.deleteTask(req.body.taskID);
  res.json(result);
});

dbModule.js(我創建的)

deleteTask: (taskID) => {
        return Task.findByIdAndDelete({_id: taskID});
    }

通過 Postman 運行它會返回一個結果,並且確實會從集合中刪除該任務。 我添加了客戶端代碼,如下所示:

這是 HTML:

<button class="btn btn-danger" (click)="deleteTask(task._id)">Delete
  <!-- There is an SVG icon here, removed for clarity -->
</button>

對應的 TS 組件:

deleteTask(taskID)
  {
    this.dbService.deleteTask(taskID).subscribe(data => {
      console.log(data);
    });
    this.router.navigate(['/tracker']); <!-- redirect to simulate a refresh -->
  }

服務代碼:

deleteTask(taskID):Observable<any>
  {
    return this.http.post("http://localhost:3000/deletetask", taskID, httpOptions);
  }

當我添加客戶端代碼並嘗試運行 function 時,我不斷收到“POST http://localhost:3000/deletetask 400(錯誤請求)”

我不知道我做錯了什么。 我以為它可能是 CORS 的東西,但我添加了 CORS npm ZEFE90A8E604A7C840E88ZF03DZ 我還有另一個 function 添加任務,對服務器進行 POST 調用,並且工作正常,我所有其他調用也是如此。

有任何想法嗎?

從我的評論擴展。

  1. 最好將路由移動到訂閱的nextcomplete回調中。 這樣我們就可以確定 HTTP 請求在路由到其他地方之前完成。

  2. 根據您在后端訪問值的方式,您實際上可能需要從客戶端發送 object。 嘗試以下

this.http.post("...", { taskID: taskID }, httpOptions);

這是解決方案:

return this.http.post("http://localhost:3000/deletetask", {taskID}, httpOptions);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM