CNode

问个关于中间件的问题

Xxinyuanyu发布于12 年前最后回复12 年前10 回复5143 浏览0 收藏

我使用了express 4 作为框架搭建了一个应用, 现在写了个认证相关的function(req, res, next),在单独的模块里面,并且exports了出来

在app.js里面 app.post(/.*$/, auth()); 直接这样调用是可以的

但是 app.use(auth()); 就不行了,请问这个是什么问题啊

或者可以给一个express 4 上自己写的中间件的例子吗?

查看回复

回复 (10)

K
kaianny#1·12 年前
app.use(auth) 呢
X
xinyuanyu#2·12 年前
引用 kaiannyapp.use(auth) 呢

auth被定义成了一个函数,这个函数返回一个新的函数,新函数是 function(req, res, next). 所以直接app.use(auth)是不行的

不确定是不是因为express4 抛弃了connect引起的,网上很多例子都是connect的

K
kaianny#3·12 年前

4没有用过

X
xinyuanyu#4·12 年前
引用 kaianny4没有用过

哦,还是谢谢啦

X
xinyuanyu#6·12 年前
引用 kaianny4没有用过

@kaianny 试了几下,貌似都不行,现在只能先app.post(/.*$/, auth()); 提前拦截post请求了

L
lcjnil#7·12 年前
module.exports =function FUNNAME(arg1, arg2) {
  return function FUNNAME(req, res, next) {
  }
};

然后

app.use(FUNNAME());

调用

X
xinyuanyu#8·12 年前
引用 lcjnil然后 调用

我的代码是这么写的 auth.js :

module.exports = function() {
    return function (req, res, next) {...};
}

app.js

...
auth = require("./middleware/auth"),
...
app.use(auth());

每次请求的时候,auth.js都没有运行。

我也试了不用匿名函数,结果是一样的

I
icarusysuper#9·12 年前
引用 lcjnil然后 调用

@xinyuanyu 你的app.use(auth())写在路由中间件后面?看下你的app.use的中间件的调用顺序

X
xinyuanyu#10·12 年前
引用 lcjnil然后 调用

@hzbqjltx app.use(auth())是放在路由信息的前面的,所有的路由信息都是用app.get / app.post这种方式写的

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