Node Express:您应该始终在 get 或 post 处理程序中调用 next() 吗?

2024-06-22

到目前为止我已经定义了我的get and post处理程序仅(req, res)作为参数,假设我将这些处理程序放在中间件链的最后,并确保我在这些处理程序中正确处理任何响应和错误处理......因此,我不做任何处理并不重要参考next.

这是一种有效且明智的方法,还是始终致电的良好做法next()即使(目前)之后什么也没有发生?例如,也许将来您可能想要在这些路线之后进行一些处理...或者也许有一个我还没有遇到的原因,为什么总是打电话是一个好习惯next().

例如,快递中有如下简单的例子路线指南 https://expressjs.com/en/guide/routing.html:

app.get('/example/b', function (req, res, next) {
    console.log('the response will be sent by the next function ...')
    next()
}, function (req, res) {
    res.send('Hello from B!')
})

当然,我很欣赏这是一个非常简单的示例来说明处理程序可以链接,并不是为了提供一个完整的框架get处理程序,但定义和使用会更好吗next即使在第二个处理程序中,如下所示?

app.get('/example/b', function (req, res, next) {
    console.log('the response will be sent by the next function ...')
    next()
}, function (req, res, next) {
    res.send('Hello from B!')
    next()
})

或者实际上常见的做法是假设将响应发送回客户端的处理程序函数应该not call next()...即假设应该是链将在实际发送响应的处理程序处结束?

或者在这一点上没有既定的惯例?

我什至想知道不发送任何回复是否很常见get处理程序,但将其推迟到之后的专用响应处理程序......我的意思是OK响应处理程序而不是错误响应处理程序(为此定义一个错误响应处理程序似乎是常见的做法最终错误处理程序 https://expressjs.com/en/guide/error-handling.html并打电话next(err))。因此,在没有错误的情况下,您可以调用next()在下面的中间件中你会做你的res.status(200).send(req.mydata) where req.mydata添加到您的get处理程序。


不,您应该只打电话next()如果您想要其他东西来处理该请求。通常这就像说您的路线可能与该请求匹配,但您想要表现得好像它不匹配一样。例如,您可能有两个处理程序用于同一路线:

app.get('/test', (req, res, next) => {
  if (something) {
    return next();
  }
  // handle request one way (1)
});

app.get('/test', (req, res) => {
  // handle request other way (2)
});

始终会调用第一个匹配的处理程序,因此对于 GET/testrequest 第一个处理程序将被调用,但它可以选择将控制权传递给第二个处理程序,就好像第一个处理程序与请求不匹配一样。

请注意,如果第二个处理程序不打算将请求传递给下一个处理程序,它甚至没有next在其论点中。

如果没有第二个处理程序,则标准404如果第一个调用的处理程序将被使用next().

如果您将参数传递给next()然后将调用错误处理中间件。

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

Node Express:您应该始终在 get 或 post 处理程序中调用 next() 吗? 的相关文章

  • 在原子操作中测试和递减?

    我刚刚发现了一个恼人的错误 它基本上是一个竞争条件 为了便于论证 我们假设一个非常简单的文档结构 例如 id XXX amount 100 集合中存在数百个这样的文档 并且由多个编写器访问 这些编写器有效地尝试将数量降低任何值 但绝不会低于
  • Node.js 护照会话 Cookie 域

    我正在使用 node js Passport 并试图弄清楚如何在父域上设置 cookie 以便它可用于子域 用户登录 Domain com 然后用户访问 Sub Domain com 他应该仍然处于登录状态 如何在父域上设置 cookie
  • Discord.js v12:如何等待 DM 通道中的消息?

    这是我尝试过的代码 message author dmChannel awaitMessages msg gt console log msg content 但它返回此错误消息 TypeError Cannot read property
  • Electron Auth0Lock“原始文件://不允许”

    尝试让 auth0 与我的电子应用程序一起使用 当我按照默认教程并尝试使用用户名 密码 身份验证进行身份验证时 锁定失败并显示 403 错误 并响应 不允许使用 Origin file 我还在 auth0 仪表板中客户端设置的允许来源 CO
  • 通过条件将 Firebase 云消息传递 (FCM) 发送到多个主题的正确语法是什么

    简而言之 我想使用 Google Cloud Functions 向订阅主题组合的设备发送通知 文档说 主题中的 TopicA 主题中的 TopicB 主题中的 TopicC 我试图做的是 var topicsConditions type
  • 如何删除 node_modules - Windows 中的深层嵌套文件夹

    尝试删除后节点模块创建的目录npm install 源文件名大于文件支持的名称 系统 尝试移动到路径名称较短的位置 或者尝试 在尝试此操作之前重命名为较短的名称 I also tried shift delete and still hav
  • 打字稿不适用于 tsconfig.json

    在项目中使用 tsconfig 运行 tsc watch 时 出现以下错误 它需要 Node js 中的 React 和 Redux 类型 error TS2688 Cannot find type definition file for
  • Aptana Studio 有 NodeJS 插件吗?

    Aptana Studio 有 NodeJS 插件吗 至少对于 NodeJS 代码辅助来说是这样 也许是创建 NodeJS 项目的一种方法 以及本地NodeJS调试 目前我们没有 NodeJS 支持 如果社区对此感兴趣 那么提交功能请求并对
  • 如何覆盖 DOMParser 上的 node/xmldom errorHandler?

    I use https github com jindw xmldom https github com jindw xmldom并想要检查 XML 文件的解析错误 文档中写道 有必要在 DOMParser 的构造函数上覆盖 locator
  • Mongoose 填充与对象嵌套

    使用之间是否有任何性能差异 查询的处理时间 猫鼬种群 http mongoosejs com docs populate html和直接对象包含 每种应该什么时候使用 猫鼬种群示例 var personSchema Schema id Nu
  • 填充对象 ID 数组

    我的架构 var playlistSchema new Schema name type String require true videos type mongoose Schema Types ObjectId ref Video co
  • 页面路由不完全是我想要的

    我在下面的代码中使用 Angular Routing 将用户引导至新的注册表单 该应用程序的工作原理如下 用户看到一个网页 要求他们通过单击适当的按钮在 数字报价 或 屏幕报价 之间做出选择 单击该按钮后 它应该将其定向到另一个显示相应注册
  • 找不到模块:错误:与 webpack 捆绑时无法解析模块“模块”mongodb

    当我尝试在节点应用程序中使用 mongoose connect 时 Webpack 抛出以下错误 最初还有一些错误 例如 Module not found Error Cannot resolve module fs 在我的 webpack
  • 将 React 应用程序作为后台进程运行

    我对部署前端代码完全陌生 因此提出了这个问题 我有一个 React 应用程序 需要作为后台进程运行 但是我对如何执行此操作有点困惑 我运行一个 npm 脚本 npm run build 在服务器上构建 缩小和服务项目 构建过程的相关代码是这
  • 无法使用IP地址访问WebStorm内部服务器

    我在 PC 上安装了 WebStorm 并启动了 NodeJS 服务器 我可以使用 Chrome 和 Firefox 浏览器访问它localhost但不是我电脑的 IP 地址 我按照给出的指示进行操作here https intellij
  • Node.js:301 重定向非 www,不带 Express

    对于现有项目 我只想做一个简单的更改 将 www mysite com 重定向到 mysite com 因为 cookie 问题 非 www 版本无法访问 www 上的 cookie 我不想包括快递 我该如何做这个简单的改变 我认为这就是您
  • Eslint 不忽略 node_modules 文件夹

    不知何故更新后Babel from 6 to 7 my eslint开始发出这样的警告node modules 所以 根据我的理解node modules文件夹不会被忽略 这就是问题出现的原因 所以 通读eslint docs https
  • 脚本不会从nodejs应用程序中的ejs文件运行

    我正在尝试使用nodejs express mysql和ejs让网页显示图表 但我显然不明白ejs javascript等是如何工作的 我需要运行一个脚本来设置图表 来自 Chart js 模块 但它不会输出任何类型的图表 我尝试过的 将
  • 如何阻止我的 App Engine 应用程序的“appspot.com”?

    我添加了一个自定义域 并将其添加到 App Engine 例如 假设我的自定义域是 example com 我的应用程序由 Node js 提供服务 当我通过 App Engine 部署我的应用程序时 它会向我提供以下地址来访问它 exam
  • 在 OpenShift 上部署 Create React App:EACCES:权限被拒绝,打开 '/home/node/app/.eslintcache'

    我正在尝试使用 Dockerfile 在 OpenShift 上部署 Create React App webapp OpenShift 构建成功完成 当我访问路线时 我可以看到应用程序运行 1 秒 然后屏幕上出现此错误 Failed to

随机推荐

  • 使用 jasmine 测试 Express.js

    我正在学习 Node js 和 Express 框架 我是茉莉花的忠实粉丝 所以我想尽可能使用 jasmine 但是 我找不到用 jasmine 测试 Express 的好方法 例如 我应该如何在 app js 中测试路由 如果我在 app
  • 我怎样才能获得特定的结果块?

    是否可以检索特定范围的结果 我知道如何执行 TOP x 但我将检索的结果太大并且会超时 我希望能够选择前 10 000 个结果 然后选择接下来的 10 000 个结果 依此类推 这可能吗 WITH Q AS SELECT ROW NUMBE
  • 如何在 Swift 中使用 `syslog`

    好像syslog Swift 2 中不提供此功能 我怎样才能发送消息给syslog在 OS X 上 问题是 void syslog int priority const char message 采用可变参数列表并且不会导入到 Swift
  • 用户“xxx”登录失败无法打开显式指定的数据库解决办法

    我首先使用实体 框架代码 启动应用程序时 应用程序尝试在 SQLServer2008R2 上创建数据库 我收到的错误消息是 用户 NT instans Networkservice 登录失败 无法打开明确指定的数据库 更仔细地查看 SQLS
  • Android Studio gradle bintray 上传失败:无法签署版本

    运行后 gradlew bintrayUpload 我收到以下错误 我的库 bintray上传失败 失败 构建失败并出现异常 出了什么问题 任务 my library bintrayUpload 执行失败 无法签署版本 0 8 1 HTTP
  • popstate 从 Safari 16 开始就不起作用了?它一直工作到 Safari 15

    我想在用户单击浏览器的后退按钮时显示图像 下面的代码在 safari 15 5 中运行良好 但是当我升级到 safari 16 1 时 它不起作用 Popstate 无法在 Safari 16 1 中工作
  • 当输入字符而不是数字时,防止 FORTRAN 关闭

    我有一个读取语句需要一个数字 非常简单的示例代码 program test integer var read var end 问题是我通常输入一串字符 即 yes 因为分心 如何防止我的代码完全停止并显示以下类型的错误消息您输入了错误的值
  • Python 输出中的俄语符号已损坏(编码)

    我解析了一个 HTML 文档 其中包含俄语文本 当我尝试打印它时Python http en wikipedia org wiki Python 28programming language 29 我明白了 我尝试解码它并得到 ISO 88
  • 如何在 ssas 中使用 alter script 进行部署

    如果我在开发服务器 SSMS 的分析服务中的整个数据库上创建更改脚本并在生产服务器 SSMS 上执行该脚本而不是通过 BIDS 进行部署 是否有问题 不 您实际上不应该使用 BIDS 来部署到产品 BIDS 将始终覆盖目标服务器的管理设置
  • 从 2 个平面轮廓进行表面重建 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有一类用于两个平面轮廓之间的三角测量的算法 这些算法尝试进行 良好的三角测量 来填充这些轮廓之间的空间 其中之一 基于动态规划技术 并使用成本函
  • 有没有办法在 XML 模式中强制/保留 XML 元素的顺序?

    让我们考虑以下 XML 架构
  • java中将字符串的一部分转换为int

    我想知道如何获取字符串中的一些数字并将它们转换为整数类型 例如 如果用户输入 12 15pm 我如何获得 1 和 2 并生成值为 12 的 int 鉴于上面的例子 你可以尝试这样的事情 final int value Integer par
  • 如何为 input() 提供时间窗口,如果不使用则让程序继续运行

    我拥有的是 import time r 0 while True print r r 1 time sleep 3 number input num int number if num r print yes else print no 我
  • 查询 SQL 中的感叹号

    我正在阅读这个查询 我遇到了一行我不明白的行 FETT List FETT Search FETT 列表是一个表格 FETT 搜索是 FETT 列表中的一栏 谁能解释一下感叹号是什么意思 Thanks 好吧 你每天都会学到新东西 我原本打算
  • Selenium Actions 类无法在大于 3.1 的 selenium 版本中解析

    我们使用 selenium 2 5 2 进行 Java 测试 我们决定是时候升级到最新的 selenium 版本 当前为 3 14 从下载 selenium 3 14 后https www seleniumhq org https www
  • 如何在 chai should 中做“或”

    我该如何做or测试用chai should 例如就像是 total should equal 4 or equal 5 or total should equal any 4 5 正确的语法是什么 我在文档中找不到任何内容 断言目标是给定数
  • 将文本添加到 Inno Setup 中的“就绪页面”

    我向安装程序添加了一些自定义页面 这些页面从用户和磁盘收集一些数据 我想在最终安装步骤开始之前向用户显示这些数据 Inno Setup 的 准备安装 页面正是用于此目的 如何向该页面添加文本 默认情况下它向我显示 Destination l
  • 关联中的 MyBatis 集合仅返回一行

    我必须在一个项目中使用 MyBatis 并且我正在尝试使用我的关联中的集合来定义 resultMap 我将简化我的问题 所以我们假设我的数据库有两个表 World idWorld 世界名称 Level id级别 级别名称 idWorld 我
  • Bash:执行命令时超时/文件溢出终止

    我正在用 bash 编写一个模拟评分脚本 它应该执行一个 C 程序 该程序将给出一些输出 我将其重定向到一个文件 我试图 1 使其在一定持续时间后超时 并且 2 如果输出文件到达某个文件则终止尺寸限制 不知道如何解决这两个问题 有什么帮助吗
  • Node Express:您应该始终在 get 或 post 处理程序中调用 next() 吗?

    到目前为止我已经定义了我的get and post处理程序仅 req res 作为参数 假设我将这些处理程序放在中间件链的最后 并确保我在这些处理程序中正确处理任何响应和错误处理 因此 我不做任何处理并不重要参考next 这是一种有效且明智