2016-11-23 27 views
1

我使用express-ws在我的服务器和客户端浏览器之间发现了可靠的Websocket连接,从而发现了我的web服务器的示例代码。代码将开始在3000端口监听websocket连接。next()调用nodejs中的express-ws模块

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); 

express-websocket中next()API的用法是什么?

回答

1

它调用堆栈中的下一个middleware

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

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

如果当前中间件功能没有结束请求 - 响应周期 ,它必须调用next()来控制传递到下一个中​​间件 功能。否则,请求将被挂起。 explanation 示例一个简单的hello world示例使用express,后面我们将定义中间件函数。

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

中间件功能

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

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

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

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); 

每次应用程序收到请求时,它都会向终端输出消息“LOGGED”。

中间件加载顺序很重要:首先加载的中间件功能也首先执行。

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

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

Source Expressjs guide article