微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

const express = require('express');

const app = express();

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

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

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

app.listen(3000);

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

解决方法

route 的顺序在 express 中很重要

基于first come first serve的快速匹配路由,就像队列一样。

如果路由匹配,那么您作为回调传递的任何函数都会被调用。

在你的情况下: 路线 1:匹配每条路线 路线 2:匹配 /add-product 路线 3:匹配每条路线

所以检查的顺序是 1 -> 2 -> 3

所以如果我给 GET 打电话 (1) 和 (2) 将被称为 和以下日志

/add-product

虽然调用 This always runs! In add product middleware! 将 导致 (1) 和 (3) 被调用。

/

This always runs! In another middleware! 只是将控制权传递给下一个中间件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。