当前位置: 首页 > 知识库问答 >
问题:

next()在express中如何工作?res.send()之后会发生什么?

岳浩穰
2023-03-14
const express = require('express');

const app = express();

app.use('/', (req, res, next) => {
    console.log('This always runs!');
    next();
});

app.use('/add-product', (req, res, next) => {
  console.log('In add product middleware!');
  res.send('<h1>The "Add Product" Page</h1>');
});

app.use('/', (req, res, next) => {
  console.log('In another middleware!');
  res.send('<h1>Hello from Express!</h1>');
});

app.listen(3000);

NodeJS/Express:什么是“app.use”?我读了这篇文章,仍然对这个程序中的控制流感到困惑。为什么如果我访问“localhost:3000/add product”,记录的结果是“这总是运行!在add product中间件中!这总是运行!在另一个中间件中!”(我省略了变更行)这是否意味着在它进入第二个应用程序之后。如我所知,使用每个应用程序。每次向服务器发送请求时都会调用use(中间件)。所以这个过程会重新启动,但是为什么这次next()会导致第三个应用。打电话有什么用?我以为next会进入下一条匹配路径。。

共有1个答案

平元明
2023-03-14

路线的顺序在Express中很重要

按照先到先得的原则快速比赛路线,就像排队一样。

如果路由匹配,则将调用作为回调传递的任何函数。

在您的情况下:路线1:匹配每条路线路线2:匹配/添加产品路线3:匹配每条路线

所以检查的顺序是1-

因此,如果我使GETCALL TO/add-Products(1)和(2)将被调用,并且以下日志

This always runs!
In add product middleware!

而调用/将导致调用(1)和(3)。

This always runs!
In another middleware!

Next()只是将控件传递给下一个中间件

 类似资料:
  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 问题内容: 我有一个相当简单的Express.js应用程序,带有一个登录组件,如果登录失败,我想尽早退出。我看到有迹象表明该应用程序没有执行此操作,也没有找到明确的答案来表明调用是否停止任何进一步的处理。这是我现在的代码: 如果我正确地阅读了源代码,它 应该 结束请求(终止进一步的处理),但是我是Node的新手,所以我还没有准备好相信我认为的内容。归根结底,我想我主要是在寻找更可靠的资源来获得最终

  • 问题内容: 我是一个初学者,我试图理解之间的差异和? 问题答案: 重新发送 res.send仅在Express js中。 为简单的非流式响应执行许多有用的任务。 能够自动分配Content-Length HTTP响应标头字段。 能够提供自动的HEAD和HTTP缓存新鲜度支持。 实际说明 只能被调用一次,因为它等同于+ 例 有关更多详细信息expressjs.com/en/api.html 重新写入

  • 这是udemy教程中显示链表的代码,这里我们将使用一个数组并将这些值存储在链表中。我不明白代码是怎么工作的。在下面的代码中,我们存储下一个节点的地址,如何last->next=temp;在我没有创建last=new node这样的最后一个节点的地方工作;我只创建了最后一个指针。我没弄明白,有人能给我解释一下它是怎么工作的吗

  • 假设您有一个简单的代码块,如下所示: 这个函数有两个参数和,分别表示请求和响应对象。 另一方面,还有其他函数带有第三个参数,称为。例如,让我们看看下面的代码: 我不明白的意义是什么,也不明白为什么要使用它。在那个例子中,如果id不存在,实际上在做什么?

  • 问题内容: 我想知道当你使用注释方法时实际发生了什么?当然,我知道Spring将把该方法包装在Transaction中。 但是,我有以下疑问: 听说Spring创建了代理类?有人可以更深入地解释这一点。该代理类中实际包含什么?实际班级会怎样?我怎么能看到Spring创建的代理类 我还在Spring文档中读到: 注意:由于此机制基于代理,因此仅会拦截通过代理传入的“外部”方法调用。这意味着“自调用”