javascript - 一个函数在我用 Postman 测试时有效,但在我的客户中不起作用
问题描述
我的客户端中有一个按钮,需要根据 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);
}
当我添加客户端代码并尝试运行该函数时,我不断收到“POST http://localhost:3000/deletetask 400(错误请求)”
我不知道我做错了什么。我认为这可能是 CORS 的问题,但我添加了 CORS npm 包。我还有另一个添加任务的函数,它对服务器进行 POST 调用,并且工作正常,我的所有其他调用也是如此。
有任何想法吗?
解决方案
从我的评论扩展。
最好在订阅
next
或complete
回调中移动路由。这样我们就可以确保 HTTP 请求在路由到其他地方之前完成。根据您在后端访问值的方式,您实际上可能需要从客户端发送一个对象。尝试以下
this.http.post("...", { taskID: taskID }, httpOptions);
推荐阅读
- javascript - 过滤 javascript 对象数组以包含特定字段
- c# - 如何从 POST 正文访问 json
- firebase - 当我尝试从 Firebase 获取用户名时,应用程序中的闪烁抽屉
- django - Django 验证问题
- c# - 使用 C# HttpClient 登录 Salesforce
- javascript - 使用回调返回数据后,函数仍会从其他函数中捕获错误
- c++ - 数学表达式中奇怪的 clang 格式
- android - 在编辑文本中,如果我键入一个字符然后键入另一个字符,则其他字符会覆盖第一个字符
- go - Gorm 在一次操作中更新和获取更新的行?
- swift - 如何从 XIB 文件加载自定义创建的视图并添加到 StackView