javascript – 节点和节点中间件中的’req’和’res’参数是什么?

我是Node和Express的新手,其他层与建立带节点的Web应用程序以及请求和响应参数一起让我感到困惑.我的困惑在于这两个参数通常存在于函数中,但通常不会声明其中的一个或两个.此外,大多数情况下会引入其他参数,例如“下一个”或其他内容.例如,我有一个API的以下路由器:

router.route('/teams')
    // create a team at POST http://localhost:8080/api/teams
    .post(function(req,res) {
        var team = new Team();
        team.name = req.body.name;
        team.location = req.body.location;

        // save the new team and check for errors
        team.save(function(err) {
            if (err) {
                res.send(err);
            };
            res.json({ message: 'Team created!' });
        }); 
    })
    // GET all the teams at GET http://localhost:8080/api/teams
    .get(function(req,res) {
        Team.find(function(err,teams){
            if (err) {
                res.send(err);
            };
            res.json(teams);
        });
    });

.post和.get都使用req和res作为参数调用函数,但从不使用req.那么,如果没有定义和使用或者没有在完全不同的订单中使用,该函数如何知道如何处理req或res?或者如果我给他们命名完全不同的东西?

请求和响应究竟发生了什么?对不起我的无知.我已经阅读了文档,但没有点击.

谢谢.

解决方法

当你使用expressApp.use(‘/ some / route’,myRouteHandler)时; Express将侦听该路由的请求,当它被命中时,它将调用您提供的功能(回调).它将为它提供三个参数:请求和响应,以及下一个. (实际上可能是四个,但是让事情变得简单.)

所以,你的回调可能是这样定义的:

function myRouteHandler(a,b,c) {
    // do stuff
};

或者像这样:

function myRouteHandler(req,res,next) {
    // stuff
}

或者干脆:

function myRouteHandler() {
    // stuff
}

无论你做什么,都无关紧要.应用程序启动时,express会侦听请求.

当其中一个匹配路由(/ some / route)时,express将在其内部工作中调用您提供的函数,如下所示:

myRouteHandler(requestObject,responSEObject,nextMiddleware);

因此,在第一种情况下,您可以使用req访问请求(例如,请求标头,完整网址,来电者IP地址或类似信息).在第二种情况下,您可以通过拨打电话来访问它.在第三种情况下,您可以使用参数[0].

按照惯例,人们将使用以下形式:myCallback(req,res)并知道Express将把请求对象作为第一个参数,并将响应作为第二个参数.响应对象实际上有一个方法end(),因此您可以结束请求.如果还有next()对象,则可以调用一个中间件.

假设你有一个像这样定义的路线:

app.use('/api/users',checkAuthorizationHandler);
app.use('/api/users',makeSureTheIPisFromOurInternalNetwork);
app.use('/api/users',NowHandleTheResponse);

每个处理程序都获得第三个参数.如果你命名它,你通常在你的函数声明中称它为’next’参数.这意味着,下一个功能是有序的.

假设您的函数checkAuthorizationHandler(req,next)将检查req.headers(‘auth’)令牌,如果没有问题,它将在函数体中调用next().

然后调用函数makeSureTheIPisFromOurInternalNetwork(a,c).它将检查a.ip是否为LAN IP地址并调用c();

最后你的函数NowHandleTheResponse()将找到所有用户,并使用用户的JSON对象进行响应:arguments [1] .json([user1,user2,user3]);

所以,第一个param是表达给你的东西,它是请求,第二个是响应,第三个是下一个中间件函数.无论你怎么称呼他们,他们都在那里.

附:您还可以使用四个参数声明中间件:

function(error,req,next);

Express实际上会检查你的功能,如果它发现你有四个params而不是两个或三个,它会给你在链中早期运行的中间件抛出的任何错误.这意味着,如果你的checkAuthHandler说下一个(新的错误(‘未授权’));,你的下一个函数可能会检查该错误,如果它存在,则不给出结果.然而,检测错误的中间件通常会重新发送(‘某些错误消息’);

如果我没有把你弄糊涂,那就说,我有更多来自这里:)

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...