为什么NodeJs中的任何函数都可以有req、res和next作为参数?

Why any function in NodeJs can have req, res and next as a parameters?

const express=require('express')
const app=express();
const port=3000 || process.env.port;

function authenticate(req,res,next){
    console.log(' user authenticated')
    next();
}
function loadUser(req,res,next){
    console.log(' loading users ');
    next();
}

app.use('*', authenticate , loadUser);

app.get('/',(req,res)=>{
    
    console.log("hi user")
    res.send(" hi user ");
})


app.listen(port,()=>{
    console.log(`server started at http://localhost:${port}`);
})

谁能解释一下为什么 node js 中的任何函数都可以有 request 、 response 、 next 作为参数。 我是NodeJs新手,刚刚开始学习Node中间件

它不是节点,而是express 'app.use' 函数,它以格式(req,res,next) 的函数作为参数。 Express 表示路线(如您的情况 '*' route )并按定义的顺序调用功能。

  1. req 是表示传入请求的参数,这样您就可以在函数的任何部分访问传入请求对象。
  2. res 是表示传出响应参数的参数,因此您可以在函数中的任何位置使用响应对象来发送和操作对给定请求的响应。
  3. next是一个参数,表示路由中下一个要调用的函数的回调。它是一个可选参数。除非你要调用路由中定义的即将到来的功能,否则你不需要它。

所以...

首先它不是节点js中的'any'函数...

它只是链接到 http 路由的函数。

所以考虑一下,这是一个 http 路由..

req是请求变量。

res 是发送响应给客户端的响应变量。

next用于中间件的情况,或者如果任何条件使其不可用并使其进入另一个路由声明,如果有人拦截请求url。

看看你的代码。

如果你输入 url '/a404Page' 你会在 auth 里面,在 loadUser 之后,但是之后就没有了...

如果你输入url '/',你会在auth里面,在loadUser里面之后,在next之后会拦截'/'路由