如何将数据传递给 NodeJS 中的下一个中间件函数
How to pass data to next middleware function in NodeJS
我正在为套接字系统编写自己的中间件实现。我通读了 Laravel 中间件的源代码和一些关于 ExpressJS 实现的文档以获取灵感。
但是,我无法将数据从一个中间件处理程序传递到另一个。
我在下面写了一个非常基本的例子。输出应该是 4
但我不知道如何将输出从一个处理程序传递到另一个处理程序。我猜测是通过设置一个临时变量,但我不确定它的性能如何。
let each = require('lodash/each')
class Middleware {
constructor() {
this.handlers = [
function (data) {return data + 1},
function (data) {return data + 2}
]
}
}
class Router {
constructor() {
this.middleware = new Middleware
}
route(data) {
each(this.middleware.handlers, function(handler) {
handler(data) // no idea what to do here
})
}
}
class Socket {
constructor() {
this.router = new Router
}
write(data) {
return this.router.route(data)
}
}
let router = new Router
console.log(socket.write(1)) // should be 4
将Router
中的route
函数改为class如下,socket.write(1)
的结果为4:
class Router {
constructor() {
this.middleware = new Middleware
}
route(data) {
each(this.middleware.handlers, function (handler) {
data = handler(data)
})
return data
}
}
我正在为套接字系统编写自己的中间件实现。我通读了 Laravel 中间件的源代码和一些关于 ExpressJS 实现的文档以获取灵感。
但是,我无法将数据从一个中间件处理程序传递到另一个。
我在下面写了一个非常基本的例子。输出应该是 4
但我不知道如何将输出从一个处理程序传递到另一个处理程序。我猜测是通过设置一个临时变量,但我不确定它的性能如何。
let each = require('lodash/each')
class Middleware {
constructor() {
this.handlers = [
function (data) {return data + 1},
function (data) {return data + 2}
]
}
}
class Router {
constructor() {
this.middleware = new Middleware
}
route(data) {
each(this.middleware.handlers, function(handler) {
handler(data) // no idea what to do here
})
}
}
class Socket {
constructor() {
this.router = new Router
}
write(data) {
return this.router.route(data)
}
}
let router = new Router
console.log(socket.write(1)) // should be 4
将Router
中的route
函数改为class如下,socket.write(1)
的结果为4:
class Router {
constructor() {
this.middleware = new Middleware
}
route(data) {
each(this.middleware.handlers, function (handler) {
data = handler(data)
})
return data
}
}