在 findById 方法中处理 404 状态

Posted

技术标签:

【中文标题】在 findById 方法中处理 404 状态【英文标题】:handling 404 status in findById method 【发布时间】:2019-01-24 20:29:17 【问题描述】:

我正在 node.js (express.js + mongoose) 上创建 RESTful API。 我有 _id 和 title 的猫鼬模型。

当我处理 GET 请求以通过 _id 查找特定对象时,我使用 findById 方法,我想知道如果请求的 id 错误如何处理。换句话说,问题是“findById 方法的 404 状态如何处理”。

我尝试过类似的方法,但没有成功:

Blog.findById(id)
    .select("_id title")
    .exec()
    .then(result => 
        if (result) 
            res.status(200).json(
                article: result
            );
         else 
            res.status(404).json(
                message: 'Article was not found'
            );
        
    )
    .catch(err => 
        console.log(err);
        res.status(500).json(
            error: err
        );
    );

【问题讨论】:

错误是什么?另外,您的第一个 .then 中的 result 是什么? 【参考方案1】:

当没有对象符合条件时,猫鼬中的Model.findById 将返回 null,因此您只需在所有代码之前将 if 子句放在 .then()

.then(result => 
  if(!result) return res.status(404).send('No result found');
  // rest of your code here

这将向客户端发送 404。

【讨论】:

以上是关于在 findById 方法中处理 404 状态的主要内容,如果未能解决你的问题,请参考以下文章

flask自定义处理错误方法

无法使用 try 和 catch 处理 axios 中的 404 错误

如何在 Spring Boot @ResponseBody 中返回 404 响应状态 - 方法返回类型是响应?

如何用实际的 404 状态代码响应替换 Blazor 默认“软 404”

Ionic + Angular POST 请求返回状态 404

Spring Boot POST 请求返回 http 状态 405“方法不允许”而不是 HTTP 状态 404