一个函数在我用 Postman 测试时有效,但在我的客户中不起作用
Posted
技术标签:
【中文标题】一个函数在我用 Postman 测试时有效,但在我的客户中不起作用【英文标题】:A function works when I test it with Postman, but doesn't work from my client 【发布时间】:2020-11-19 23:15:15 【问题描述】:我的客户端中有一个按钮,需要根据 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 (Bad Request)”
我不知道我做错了什么。我认为这可能是 CORS 的问题,但我添加了 CORS npm 包。我还有另一个添加任务的函数,它向服务器发出 POST 调用,并且工作正常,我的所有其他调用也是如此。
有什么想法吗?
【问题讨论】:
此问题中没有足够的信息来诊断问题。专注于 HTTP,有效的 HTTP 请求和无效的 HTTP 请求有什么区别? 1.您需要在订阅中移动刷新调用,以确保在重新加载页面之前完成 HTTP 请求。 2.尝试将ID作为对象发送:this.http.post("...", taskID: taskID , httpOptions);
@Liam 我已经检查了很多次,我认为这就是问题所在,并且没有区别,至少在客户端没有。
@MichaelD 好像作为对象传递有效,感谢您的快速响应!
@DareRelaqz:我已经发布了答案。
【参考方案1】:
根据我的评论展开。
最好在订阅的next
或complete
回调中移动路由。这样我们就可以确保 HTTP 请求在路由到其他地方之前完成。
根据您在后端访问值的方式,您实际上可能需要从客户端发送一个对象。试试下面的
this.http.post("...", taskID: taskID , httpOptions);
【讨论】:
我认为问题不在于路由,因为它被放置在请求函数之外。我仍然不明白为什么在这里传递一个对象(考虑到我可以只取值,然后在我的集合中搜索之前手动构建对象),但它有效,所以我不会抱怨 XD @DareRelaqz:路由与问题没有任何关系,只是避免任何潜在不需要的路由的提示。例如。如果请求需要更长的时间才能完成,并且您不想在请求完成之前路由等等。【参考方案2】:这是解决方案:
return this.http.post("http://localhost:3000/deletetask", taskID, httpOptions);
【讨论】:
为什么?这如何解决任何问题? @Michael D 评论说,我不知道为什么这可以解决问题,但确实可以,所以我没有抱怨。如果它没有坏,就不要修理它。 post的第二个参数需要是一个对象。 taskID 与 taskID: taskID 相同以上是关于一个函数在我用 Postman 测试时有效,但在我的客户中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我在 index.html 中指向 manifest.json 的链接在我运行反应脚本“yarn start”时有效,但在我运行“python3 manage.py runserver”时无效
错误 - ORA-00979: 不是 GROUP BY 表达式,但在我删除 f.film_no AS "Film Number" 时有效
通过向量迭代(使用迭代器)会导致 SIGSEGV 但在索引中使用时有效 - 那怎么样?
PHP 需要“guzzle.phar”会引发致命错误,但在页面刷新时有效