我使用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);
express-websocket中next()API的用途是什么?
答案 0 :(得分:1)
它调用堆栈中的下一个middleware
。
中间件函数是可以访问请求对象(req),响应对象(res)以及应用程序请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为next的变量表示。中间件函数可以执行以下任务:
如果当前的中间件功能没有结束请求 - 响应
循环时,必须调用next()将控制权传递给下一个中间件
功能。否则,请求将被挂起。
示例使用express的简单hello world
示例,稍后我们将定义中间件函数。
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.js
或Express 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()
函数将请求传递给堆栈中的下一个中间件函数。
答案 1 :(得分:1)
如果您想了解如何编写用于快速应用程序的中间件,请按照本指南进行操作