【问题标题】:Why any function in NodeJs can have req, res and next as a parameters?为什么 NodeJs 中的任何函数都可以有 req、res 和 next 作为参数?
【发布时间】:2020-11-04 20:28:33
【问题描述】:
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 中间件

【问题讨论】:

    标签: node.js api express request response


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      所以...

      首先它不是节点 js 中的“任何”函数...

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

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

      req 是请求变量。

      res 是响应变量,用于向客户端发送响应。

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

      看看你的代码。

      如果您输入 url '/a404Page',您将在 auth 中,在 loadUser 之后,但之后将无处可去...

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 2021-02-04
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        相关资源
        最近更新 更多