为啥我收到“400:错误请求”但请求已成功发布到我的数据库

Posted

技术标签:

【中文标题】为啥我收到“400:错误请求”但请求已成功发布到我的数据库【英文标题】:Why am I getting a "400: Bad Request" but the request successfully posts to my DB为什么我收到“400:错误请求”但请求已成功发布到我的数据库 【发布时间】:2021-12-20 23:46:28 【问题描述】:

我不确定发生了什么。我使用 localhost 在 dev 中设置了所有相同的代码,一切正常。我将我的应用程序托管到 Vercel 并将我的 API 托管到 heroku,据我所知,API 运行良好。现在的问题是,当我发出发布请求时,我在浏览器中收到 400 Bad Request 错误,但它仍然发出请求并发布到我设置的数据库。任何帮助都将不胜感激。我使用 NEXT.js 在 MERN 堆栈中构建了这个应用程序

这是我的客户端发布请求

const postSubmit = async e => 
        e.preventDefault();

        try 
            const  data  = await axios.post('/create-post',  content, image );
            
            if(data.error) 
                toast.error(data.error);
             else 
                setPage(1);
                newsFeed();
                toast.success("Post created");
                setContent('');
                setImage();
                // socket.emit('new-post', data);
            
         catch(e) 
            console.log(e);
        
    

这是我对发布请求的服务器端处理

export const createPost = async (req, res) => 
    const  content, image  = req.body;
    if(!content.length) 
        return res.json(
            error: 'Content is required'
        )
    

    try 
        const post = new Post( content, image, postedBy: req.user._id );
        await post.save();

        const postWithUser = await Post.findById(post._id).populate('postedBy', '-password -secret');

        res.json(postWithUser);
     catch (e) 
        console.log(e);
        res.sendStatus(400);
    
;

这就是浏览器告诉我的内容

Chrome Browser Info

【问题讨论】:

服务器端日志中的console.log(e) 显示了什么? [服务器日志][1] [1]:i.stack.imgur.com/JB99s.png #ReadTheError - 看起来 Mongo 不高兴,这是作为错误传播的。写入可能正在发生,但由于所描述的原因,它正在生成WriteConcern。检查配置中的参数,看起来您可能在某处缺少逗号。 看起来我的 .env DATABASE 变量末尾有多余的字符。感谢您对此的帮助。 【参考方案1】:

这很可能是由 MongoDB 连接字符串 (URI) 上的拼写错误引起的,类似于 this answer。

在链接的答案中,错字是&w=majority; 中的分号。在您的情况下,该值在某种程度上是 majorityDATABASE=,因此请仔细检查您的 MongoDB 连接字符串并尝试删除写入关注参数中额外的 DATABASE=

【讨论】:

【参考方案2】:

很可能await Post.findById() 调用未找到结果,当您尝试调用res.json(postWihUser) 时可能会引发错误。如果未定义 postWithUser,这将导致错误。

发生错误时,服务器终端会记录什么?这应该可以帮助您识别问题。

【讨论】:

服务器以正确的 req.body 响应但尝试失败并出现一些 MongoDB 错误。 (长时间发布整个控制台日志)我不明白的是我的获取请求如何正常工作并与数据库通信,但我的 POST 不是。 [服务器日志][1] [1]:i.stack.imgur.com/JB99s.png 看起来我的 .env DATABASE 变量末尾有多余的字符。感谢您对此的帮助。

以上是关于为啥我收到“400:错误请求”但请求已成功发布到我的数据库的主要内容,如果未能解决你的问题,请参考以下文章

在改造中收到错误代码 400 错误请求,但适用于邮递员

Nginx HTTP 未重定向到 HTTPS 400 错误请求“普通 HTTP 请求已发送到 HTTPS 端口”

Instagram API 阻止在成功登录后重定向到 iOS 应用程序并出现 400 错误请求错误

我从我的提取请求中收到 400 错误请求错误:“需要非空请求正文”,尽管我的提取请求有一个正文

模型衍生 API 发布作业 - 400 错误请求“无效的‘设计’参数”

Instagram API 返回 400(错误请求)