Express中间件函数内调用其他中间件函数
发布于 8 年前 作者 jingsam 5109 次浏览 来自 问答

在Express里面我们经常这么设置中间件:

router.post(middleware1, middleware2, middleware3)

现在我想把中间件合并为一个中间件,并添加一些处理逻辑,如:

var auth = function(req, res, next) {
	if (req.body.username && req.body.password) {
		// 依次调用middleware1, middileware3
	}
	
	if(req.body.access_token) {
		// 依次调用middleware2, middileware3
	}
}

请问这个调用怎么写?

8 回复

昨天现场已经回复了

require('./middleware2')(req, res, next)

类似这样的写法即可

@i5ting 我现在是这样实现的:

middleware1(req, res, function() {
      middleware3(req, res, next)
    })

感觉是hack,比如middleware1中出现next(err)的时候程序就会崩

请问前辈 这个问题后面是怎么解决的

const compose = require(‘compose-middleware’).compose const fn = compose([ middleware1, middleware2, … ])

koa-compose 的 express 版

@magicdawn 你赢了,哈哈

直接调用next()不要带参数,表示当前的中间件已经处理完了,转移到下一个中间件处理(如果要传递数据应该通过res.locals)

调用next()带参数是表示当前的中间件出现了错误需要处理,会转移到下一个错误处理中间件(区别是比普通的中间件多一个函数参数)

回到顶部