next()调用nodejs中的express-ws模块

我遇到了一个示例代码为我的networking服务器使用express-ws在我的服务器和客户端浏览器之间进行可靠的Websocket连接。 代码将开始在3000端口监听websocket连接。

var express = require('express'); var app = express(); var expressWs = require('express-ws')(app); app.use(function (req, res, next) { console.log('middleware'); req.testing = 'testing'; return next(); }); app.get('/', function(req, res, next){ console.log('get route', req.testing); res.end(); }); app.ws('/', function(ws, req) { ws.on('message', function(msg) { console.log(msg); }); console.log('socket', req.testing); }); server.listen(3000); 

next-API在express-websocket中有什么用处?

它调用堆栈中的下一个middleware

中间件function是可以访问请求对象(req),响应对象(res)和应用程序请求 – 响应周期中的下一个中间件function的函数。 下一个中间件函数通常用名为next的variables表示。中间件函数可以执行以下任务:

  • 执行任何代码。
  • 更改请求和响应对象。
  • 结束请求 – 响应循环。
  • 调用堆栈中的下一个中间件。

如果当前的中间件function没有结束请求 – 响应周期,则必须调用next()将控制传递给下一个中间件function。 否则,请求将被挂起。 说明 示例一个使用express的简单hello world示例,稍后我们将定义中间件函数。

 var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000); 

中间件function

 var myLogger = function (req, res, next) { console.log('LOGGED'); next(); } 

注意上面的调用next() 调用这个函数调用应用程序中的下一个中间件function。 next()函数不是Node.jsExpress API ,而是传递给中间件函数的第三个参数。 next()函数可以被命名为任何东西,但是按照惯例,它总是被命名为“next” 为避免混淆,请始终使用此约定。

要加载中间件function,请调用app.use(),指定中间件function。 例如,以下代码在到根path(/)的路由之前加载myLogger中间件function。

 var express = require('express'); var app = express(); var myLogger = function (req, res, next) { console.log('LOGGED'); next(); } app.use(myLogger); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000); 

每次应用程序收到一个请求时,它会向terminal输出“LOGGED”消息。

中间件加载顺序非常重要:首先加载的中间件function也首先执行。

如果myLogger在到根path的path之后加载,请求永远不会到达它,并且应用程序不会打印“LOGGED”,因为根path的路由处理程序会终止请求 – 响应循环。

中间件函数myLogger只是打印一条消息,然后通过调用next()函数将请求传递给堆栈中的下一个中间件函数。

源代码Expressjs指南文章

如果您想了解如何编写用于快速应用的中间件,请按照本指南进行操作

编写用于快速应用程序的中间件