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

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说下一个(新的错误(‘未授权’));,你的下一个函数可能会检查该错误,如果它存在,则不给出结果.然而,检测错误的中间件通常会重新发送(‘某些错误消息’);

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

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

相关推荐