如何在一个函数中包装一个中间件?

我试图限制srirachapipe理到一个特定的IP。

所以我在做:

var admin = require('sriracha-admin'); app.use("/sriracha-admin", admin({ user:"user", pass:"pass123" }) ); 

我可以做些什么:

 app.use("/sriracha-admin", function(){ if(req.ip === 111.222.333.444){ return admin({ user:"user", pass:"pass123" }); } }); 

或者我可能会完全错误?

我不知道sriracha,但快速查看显示admin()函数返回一个Express应用程序: https : //github.com/hdngr/sriracha/blob/master/index.js#L104

由于Express中的中间件如下所示:

 app.use(function (req, res, next) { console.log('Request Type:', req.method); next(); }); 

(在这里看到一个例子: http : //expressjs.com/en/guide/using-middleware.html )

…我的猜测是,你的例子可能会被重写:

 app.use("/sriracha-admin", admin(myoptions).use(function(req, res, next){ if(req.ip === 111.222.333.444){ //throw an exception here, or redirect, or whatever }); }); 

我不确定是否在那里钉上了大括号,但是你希望能够得到这个想法。

我决定不要懒惰,阅读文档,我在几秒钟内find答案。

在这里,如果有人正在寻找如何通过IP或其他任何方式来限制中间件的答案。

 var ip = '1234'; app.use("/admin", function(req, res, next){ if(ip === '123'){ next(); }else{ res.sendStatus(404) } }, admin({ username: "user", password: "pass" }) ); 

我对Express的一点理解都让我想起了写上面简单的代码,或许也足以解释我的问题。 但如果有人正在寻找类似的东西,我希望这有助于。