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

时间:2016-02-02 04:21:10

标签: node.js express

我试图将sriracha-admin限制为某个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"
    });
  }
});

或者我可能完全错了?

2 个答案:

答案 0 :(得分:1)

我不知道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
  });
});

我不确定是否在那里敲了一下那个大括号,但你有希望得到这个想法。

答案 1 :(得分:1)

我决定不要懒惰并阅读文档,我在几秒钟内就找到了答案。

如果有人正在寻找关于如何通过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的理解很少让我回过头来编写上面这个非常简单的代码,或者很好地解释了我的问题。 但是如果有人在寻找类似的东西,我希望这会有所帮助。