首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >继续使用REST获得一个DELETE 400 (不好的请求)

继续使用REST获得一个DELETE 400 (不好的请求)
EN

Stack Overflow用户
提问于 2021-10-28 22:19:20
回答 3查看 1.7K关注 0票数 0

所以,我已经创建了一个API,并且我的帖子和请求都可以工作,但是我无法让删除请求工作。我一直在控制台中得到一个'DELETE http://localhost:3000/api 400 (坏请求)‘错误。

以下是我的服务器文件中的删除部分:

代码语言:javascript
运行
复制
app.delete('/api', (request, response) => {
    database.remove({ _id: request }, {}, function(err, numRemoved) {});
});

下面是执行DELETE的按钮:

代码语言:javascript
运行
复制
    document.body.addEventListener('click', function(event) {
        if (event.target.id == uid) {
            const options = {
                method: 'DELETE',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: uid
            };
            fetch('/api', options);
        };
    });

它说坏的请求来自fetch('/api',选项);,但是我不知道如何修复它!有谁可以帮我?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-28 22:37:06

错误可能是由于delete请求不应该接收json主体,您应该将uid作为路径变量传递,如下所示:

代码语言:javascript
运行
复制
app.delete('/api/:uid', (request, response) => {
    const uid = request.params.uid;
    database.remove({ _id: uid }, {}, function(err, numRemoved) {});
});

并将你的电话改为:

代码语言:javascript
运行
复制
    document.body.addEventListener('click', function(event) {
        if (event.target.id == uid) {
            const options = {
                method: 'DELETE',
            };
            const endpoint = `/api/${uid}`;
            fetch(endpoint, options);
        };
    });
票数 0
EN

Stack Overflow用户

发布于 2021-10-28 23:12:46

我认为这可能源于对DELETE请求的误解。

DELETE方法的主要目标是删除uri中的资源。例如,DELETE on /article/123删除/article/123上的资源,这意味着将来在该位置的GET请求应该导致404410

DELETE请求中有一个主体是没有意义的,因为如果请求的目的是删除URI中的资源,那么正文中的任何内容都不会进一步修改请求的含义。HTTP命令DELETE (以及GET和其他人)不应该有一个身体。

所以您提出的请求是DELETE /api,意思是“删除/api资源”。身体是不相关的(并导致你的错误)。

看起来,您需要更多的RPC风格的API。如果您只使用/api端点,您可能应该忘记所有的方法,而只使用POST。你不是真的在休息。

如果您确实希望应用更多的设计和使用适当的HTTP方法,那么您应该首先考虑路由是如何构造的。请记住,该方法描述您正在执行的操作类型,URI描述您正在执行的操作。设计API以通过单个端点(例如使用GraphQL和SOAP)的人有效地使用HTTP作为自己协议的“隧道”。

票数 2
EN

Stack Overflow用户

发布于 2021-10-28 22:26:14

我不知道uid是在哪里设置的。但是,根据您的错误消息,我假设uid不是一个有效的JSON对象。您可以将uid放到像{ uid }这样的对象中。然后,使用request.body.uid读取路由处理程序中的对象。

另外,在传统的REST中,删除请求没有主体。相反,您的路由将采用/api/:id格式。然后,您的请求url将需要更新为"/api/" + uid。然后,您可以使用req.params.id在路由处理程序中读取请求参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69761580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档