如何在一个函数中包装一个中间件?
我试图限制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的一点理解都让我想起了写上面简单的代码,或许也足以解释我的问题。 但如果有人正在寻找类似的东西,我希望这有助于。