CNode

Express中间件函数内调用其他中间件函数

问答
Jjingsam发布于10 年前最后回复10 年前8 回复5810 浏览0 收藏

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

H
hbshun#1·10 年前

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

M
magicdawn#2·10 年前

const compose = require('compose-middleware').compose const fn = compose([ middleware1, middleware2, ... ])

koa-compose 的 express 版

M
magicdawn#5·10 年前
Z
zengming00#6·10 年前

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

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

I
i5ting#7·10 年前

昨天现场已经回复了

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

类似这样的写法即可

J
jingsam#8·10 年前
引用 i5ting昨天现场已经回复了 类似这样的写法即可

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

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

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

参与回复
登录后即可参与回复。登录