下一步是啥();在这段代码中?

     2023-05-07     263

关键词:

【中文标题】下一步是啥();在这段代码中?【英文标题】:What is next(); in this code?下一步是什么();在这段代码中? 【发布时间】:2013-08-25 18:27:03 【问题描述】:

在这个 Express 应用程序(用于 Nodejs)中有一行代码使用 next();,我不明白。不知道你能不能澄清一下。

在 index.js 中,express 应用调用了一个函数 isLoggedInMiddleware。它不传递任何参数

 app.use(sessionHandler.isLoggedInMiddleware);

这就是那个函数。调用的时候没有传任何参数,但是设置成接受三个,next是最后一个,作为getUsername的返回值调用。

this.isLoggedInMiddleware = function(req, res, next) 
    var session_id = req.cookies.session;
    sessions.getUsername(session_id, function(err, username) 
        "use strict";

        if (!err && username) 
            req.username = username;
        
        return next();
    );

这是 getUserName which next();作为 callbak 的一部分传递给。你能解释一下如何 next();被使用了?在这种情况下是什么?它在做什么?

this.getUsername = function(session_id, callback) 
        "use strict";

        if (!session_id) 
            callback(Error("Session not set"), null);
            return;
        

        sessions.findOne( '_id' : session_id , function(err, session) 
            "use strict";

            if (err) return callback(err, null);

            if (!session) 
                callback(new Error("Session: " + session + " does not exist"), null);
                return;
            

            callback(null, session.username);
        );
    

【问题讨论】:

【参考方案1】:

它将控制权传递回快速应用程序以调用链中的下一个中间件/请求处理程序。

这里:

app.use(sessionHandler.isLoggedInMiddleware);

您告诉 express 使用 isLoggedInMiddleware 作为中间件。

每个中间件都会收到:

请求 - 丰富和/或查询, 响应 - 以防他们想写一些东西(即错误), 允许 express 继续处理请求的回调。

该中间件在被 express 调用时,会使用用户数据丰富请求对象,然后将控件返回给 express,然后继续到下一个中​​间件或处理程序。

【讨论】:

所以这可能是代码中看不到的东西?只是 express 框架的一部分? 中间件进一步讨论:***.com/questions/10695629/…【参考方案2】:

据我了解,它将控制权传递给下一个路由处理程序来处理请求。阅读Route Middleware。

【讨论】:

【参考方案3】:

您将传递函数与调用混淆了。

app.use(sessionHandler.isLoggedInMiddleware);

这不是isLoggedInMiddleware被调用;它只是被通过了。 app.use 接受一个应该是函数的参数;在请求期间,它将使用适当的参数(请求对象、响应对象和回调)调用该函数。

同样,

sessions.getUsername(session_id, function(err, username) 
    "use strict";

    if (!err && username) 
        req.username = username;
    
    return next();
);

next 的返回值没有被传递给getUsername;整个函数正在被传递。通过调用next,它将控制权交还给 express 框架(本质上说,“我完成了;调用下一个中间件”)。

【讨论】:

【参考方案4】:

我认为next的调用意思很明显“请转到列表中的下一个中间件”。然而,更有趣的是为什么前面有一个return

【讨论】:

查找此异常原因的下一步是啥?

】查找此异常原因的下一步是啥?【英文标题】:Whataremynextstepsonfindingthecauseofthisexception?查找此异常原因的下一步是什么?【发布时间】:2015-08-3108:18:54【问题描述】:我对Eclipse、Java和Android编程相当陌生。我已经接管了一个And... 查看详情

Ruby 中的下一步是啥?

】Ruby中的下一步是啥?【英文标题】:WhatisinvalidnextinRuby?Ruby中的下一步是什么?【发布时间】:2013-11-0212:33:27【问题描述】:以下代码有效:collection.eachdo|i|beginnextifi>10i+=1rescueputs"couldnotprocess#i"endend但是,当我们重构时:colle... 查看详情

c# windows form,部署前的下一步是啥?

】c#windowsform,部署前的下一步是啥?【英文标题】:c#windowsform,Whatisnextstepbeforedeployment?c#windowsform,部署前的下一步是什么?【发布时间】:2020-08-1416:21:55【问题描述】:刚刚在sql管理Studio中使用数据库完成了我的诊所Winforms程... 查看详情

cell.accessoryType = UITableViewCellAccessoryDe​​tailButton 下一步是啥?

】cell.accessoryType=UITableViewCellAccessoryDe​​tailButton下一步是啥?【英文标题】:cell.accessoryType=UITableViewCellAccessoryDetailButtonWHATISNEXT?cell.accessoryType=UITableViewCellAccessoryDe​​tailButton下一步是什么?【发布时间】:2014-08-0314 查看详情

使用 cx_Freeze 的下一步是啥?

】使用cx_Freeze的下一步是啥?【英文标题】:Whatismynextstepusingcx_Freeze?使用cx_Freeze的下一步是什么?【发布时间】:2012-06-1912:34:54【问题描述】:好的,我安装了python3.2并安装了cx_Freeexe4.2.3。我有一个名为Pythonstuff的文件夹。在这... 查看详情

Tigase:MUG 没有实现,下一步是啥?

】Tigase:MUG没有实现,下一步是啥?【英文标题】:Tigase:MUGnotimplemented,what\'snext?Tigase:MUG没有实现,下一步是什么?【发布时间】:2010-12-1011:59:02【问题描述】:我开始为iPhone/iPad开发多人游戏,我正在考虑使用Tigase作为游戏服... 查看详情

在 vue app 中运行 npm build 以将其部署到服务器上后,下一步是啥?

】在vueapp中运行npmbuild以将其部署到服务器上后,下一步是啥?【英文标题】:Whatcanbethenextstepafterrunningnpmbuildinvueapptodeployitonserver?在vueapp中运行npmbuild以将其部署到服务器上后,下一步是什么?【发布时间】:2020-09-2804:34:53【问... 查看详情

从 appengine 迁移到完整 django 的下一步是啥?

】从appengine迁移到完整django的下一步是啥?【英文标题】:What\'sthenextstepsformovingfromappenginetofulldjango?从appengine迁移到完整django的下一步是什么?【发布时间】:2011-06-0517:19:46【问题描述】:我是编程新手,我一直在使用appengine来... 查看详情

使用 libdbus-c++ 获得 DBus::Path - 下一步是啥?

】使用libdbus-c++获得DBus::Path-下一步是啥?【英文标题】:GotaDBus::Pathwithlibdbus-c++-whatnext?使用libdbus-c++获得DBus::Path-下一步是什么?【发布时间】:2013-05-0403:24:21【问题描述】:我有一个简短的测试程序,用于研究如何将D-Bus与libdb... 查看详情

学习了如何使用 HTML 和 CSS 从头开始​​制作响应式 HTML 电子邮件。下一步是啥? [关闭]

...如何使用HTML和CSS从头开始​​制作响应式HTML电子邮件。下一步是啥?[关闭]【英文标题】:LearnedhowtomakeresponsiveHTMLEmailsfromscratchusingHTML&CSS.What\'snext?[closed]学习了如何使用HTML和CSS从头开始​​制作响应式HTML电子邮件。下一步... 查看详情

string::npos 在这段代码中是啥意思?

】string::npos在这段代码中是啥意思?【英文标题】:Whatdoesstring::nposmeaninthiscode?string::npos在这段代码中是什么意思?【发布时间】:2011-04-1904:20:30【问题描述】:下面这段代码中的std::string::npos是什么意思?found=str.find(str2);if(found... 查看详情

& 在这段代码中的作用是啥?

】&在这段代码中的作用是啥?【英文标题】:Whatistheroleof&inthispieceofcode?&在这段代码中的作用是什么?【发布时间】:2019-10-1603:43:53【问题描述】:我正在尝试理解foam-extend中的dbns代码。但我对下面给出的以下代码的特... 查看详情

r代码段显示了自定义的html表函数和示例。我的下一步是将此html表复制并粘贴到excel文件中,(代码片段)

查看详情

r代码段显示了自定义的html表函数和示例。我的下一步是将此html表复制并粘贴到excel文件中,(代码片段)

查看详情

加固遗留 Rails 应用程序的第一步是啥?

】加固遗留Rails应用程序的第一步是啥?【英文标题】:WhatarethefirststepsinhardeningalegacyRailsapplication?加固遗留Rails应用程序的第一步是什么?【发布时间】:2015-10-3005:41:18【问题描述】:有一个生产系统已经运行了很多年,最初是... 查看详情

上一步是硬件描述语言,下一步是fpga

上一步是硬件描述语言,下一步是FPGA。学习了硬件描述语言(Verilog或者VHDL)之后,FPGA该如何继续。世上没有捷径,每一步都得踏踏实实的走。学习FPGA也是这样,在有了硬件描述语言的基础之上,可以学习FPGA基础。学习模块的划... 查看详情

使用 C++ 的 Google Cloud Speech API,第一步是啥?

】使用C++的GoogleCloudSpeechAPI,第一步是啥?【英文标题】:GoogleCloudspeechAPIusingC++,whatisthefirststep?使用C++的GoogleCloudSpeechAPI,第一步是什么?【发布时间】:2016-12-0614:17:06【问题描述】:我在我的项目中使用谷歌云语音API作为STT引... 查看详情

这段代码中的错误/错误是啥 c++ 告诉我更正?

】这段代码中的错误/错误是啥c++告诉我更正?【英文标题】:whatismistakes/errorsinthiscodec++tellmethecorrection?这段代码中的错误/错误是什么c++告诉我更正?【发布时间】:2010-03-1620:06:13【问题描述】:在这段代码中编译器打印错误:1... 查看详情