如何在express.js中抛出404错误?

2023-11-21

在 app.js 中,我有

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

所以如果我请求一些不存在的网址,例如http://localhost/notfound,上面的代码将会执行。

在存在的网址中http://localhost/posts/:postId,我想在访问一些不存在的postId或删除的postId时抛出404错误。

Posts.findOne({_id: req.params.id, deleted: false}).exec()
  .then(function(post) {
    if(!post) {
      // How to throw a 404 error, so code can jump to above 404 catch?
    }

可以这么说,在 Express 中,404 不被归类为“错误”- 其背后的原因是,404 通常并不是出现问题的迹象,而只是服务器找不到任何内容。最好的办法是在路由处理程序中显式发送 404:

Posts.findOne({_id: req.params.id, deleted: false}).exec()
  .then(function(post) {
    if(!post) {
      res.status(404).send("Not found.");
    }

或者,如果感觉重复代码太多,您可以随时将该代码提取到函数中:

function notFound(res) {
    res.status(404).send("Not found.");
}

Posts.findOne({_id: req.params.id, deleted: false}).exec()
      .then(function(post) {
        if(!post) {
          notFound(res);
        }

我不建议在这种情况下使用中间件,仅仅是因为我觉得它会使代码不太清晰 - 404 是数据库代码找不到任何内容的直接结果,因此在路由处理程序中包含响应是有意义的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在express.js中抛出404错误? 的相关文章

随机推荐

  • Swift 中的 parser.parse() 导致 EXC_BAD_ACCESS

    我正在跟进本教程作为我正在 Swift 中开发的 RSS feeder 应用程序的快速启动 我知道自本教程以来 Swift 中发生了一些变化 但它们似乎都没有解释为什么我遇到这个问题 我的 TableViewController 中的相关代
  • 什么是事件冒泡和捕获?

    事件冒泡和捕获有什么区别 什么时候应该使用冒泡和捕获 事件冒泡和捕获是 HTML DOM API 中事件传播的两种方式 当一个事件发生在另一个元素内的一个元素中 并且两个元素都注册了该事件的句柄时 事件传播模式决定于元素接收事件的顺序 通过
  • HEAD~ 与 HEAD^ 与 HEAD@{} 也称为波形符、插入符号与 at 符号

    HEAD 是当前分支的指针 我见过 HEAD 祖先的各种符号 包括 HEAD 2 HEAD 2 HEAD 2 HEAD HEAD 上述每一项具体意味着什么 这方面的文档在哪里 来自文档here HEAD 2 2 次提交早于 HEAD HEA
  • iPhone SDK 4.3 libav编译问题

    我遇到了奇怪的问题 我安装了 iPhone SDK 4 3 和 xCode 4 现在无法从 ffmpeg 为 ARMv6 架构编译 libav 这是我的编译脚本 它适用于 iPhone SDK 4 2 configure disable d
  • HTTP POST 请求的大小限制是多少?

    抱歉 如果这是重复的 我想它会是 但找不到任何东西 我有一个 Flex 应用程序 我通过 Internet Explorer 将数据发送回 PHP MySQL 服务器 我还没有遇到任何问题 但是提前知道这一点可能会为我节省大量的挫败感和工作
  • c 中与平台无关的 size_t 格式说明符?

    我想打印出一个类型的变量size t在 C 中 但似乎size t不同架构上不同变量类型的别名 例如 在一台机器 64 位 上 以下代码不会引发任何警告 size t size 1 printf the size is ld size 但在
  • 有没有办法使用 Kafka Confluence REST API 生成带有标头的 Kafka 消息?

    我正在尝试使用一些自定义标头向 Kafka 发送消息 但我找不到方法 根据文档 The POST topics string topic name API 无法将自定义标头附加到消息 有谁知道如何通过融合的 Kafka REST API 发
  • 在 ASP.NET MVC 的模型中调用 UrlHelper

    我需要在 ASP NET MVC 的模型中生成一些 URL 我想调用类似 UrlHelper Action 的方法 它使用路由来生成 URL 我不介意填写常见的空白 例如主机名 方案等 我可以调用任何方法吗 有没有办法构造一个UrlHelp
  • `np.concatenate` 具有稀疏矩阵的 numpy 数组

    数据集包含数值变量和分类变量 我将其分为两部分 cont data data cont variables values disc data data disc variables values 然后我用sklearn preprocess
  • 所有预加载链接的 Next.js 404 错误

    我是 next js 的新手 作为第一步 在开始开发实际的应用程序之前 我正在按照文档学习基础知识 现在 我正在努力尝试让预取工作 因为所有预加载的请求返回 404 错误 那么我的代码有什么问题吗 我怎么解决这个问题 演示存储库已开启git
  • T-SQL 四舍五入到小数位

    如何将 matchpercent 的结果四舍五入到小数点后两位 我使用以下命令返回一些结果 DECLARE topRank int set topRank SELECT MAX RANK FROM FREETEXTTABLE titles
  • XML 序列化 - 何时使用 DataContractSerializer / Binary / XMLSerialiser

    我已经看这个有一段时间了 似乎不鼓励二进制序列化 因为对字段名称的任何更改都会破坏序列化 不好 XMLSerializer 是有问题的 因为您必须提供无参数构造函数和公共字段 尽管您确实可以更好地控制作为属性或元素的元素及其命名 DataC
  • mysql_escape_string 整个后数组?

    我想知道是否可以将 my sql escape 字符串存储到整个 POST 和 GET 数组中 这样就不会错过任何变量 不知道如何测试它 否则我自己会测试 谢谢 我会用array walk 功能 它更适合 因为修改了 POST 超全局 因此
  • 如何防止 write.csv 将 POSIXct、日期和时间类更改回字符/因子?

    我有一个 csv 文件 其中每个字段分别表示日期时间 日期和时间 本来它们都是字符字段 我对它们进行了相应的转换 在我的代码末尾 如果我这样做 str data 我会得到 datetime POSIXct date Date time Cl
  • 根据ID在jquery中设置单选按钮“选中”

    我有两个同名的单选按钮 默认情况下选中一个 从 id 选择时如何选中或取消选中 jQuery 中的单选按钮 我试过了 radio1 attr checked checked radio1 attr checked true 似乎没有任何作用
  • ALLOWED_HOSTS 正在防御什么漏洞?

    该示例来自 Python Django 框架 但适用于所有 Web 应用程序 如何ALLOWED HOSTS setting保护您的网站和用户 即如果ALLOWED HOSTS被设置为 恶意用户将如何 毒害带有恶意主机链接的缓存和密码重置电
  • 对三个对象使用“==”运算符

    这两种检查三个对象之间相等性的方法之间是否存在计算差异 我有两个变量 x and y 假设我这样做 gt gt gt x 5 gt gt gt y 5 gt gt gt x y 5 True 这与以下有什么不同 gt gt gt x 5 g
  • 如何克隆 JPA 实体

    我有一个 JPA 实体已保存在数据库中 我想要一份它的副本 具有不同的 ID 并修改了一些字段 做到这一点最简单的方法是什么 喜欢 设置它的 Id字段到null并且坚持下去会有效果吗 我是否必须为实体创建一个克隆方法 复制除 Id 还有其他
  • 在javascript中计算单词并将其推入一个对象中

    我想实现一个 javascript 程序 计算一个单词并返回该单词及其出现的次数 例如 hello 2 hello 1 world 1 toString 1 下面是我的代码 但我只得到总字数 function words str app r
  • 如何在express.js中抛出404错误?

    在 app js 中 我有 catch 404 and forward to error handler app use function req res next var err new Error Not Found err statu