通过app.use()

时间:2017-01-31 17:12:54

标签: javascript node.js express

我对节点js不是新手,因此我对app.js配置的所有概念都不清楚。因此,寻求社区的帮助。

目前我在app.js文件中有以下代码作为身份验证的中间件。

          var authChecker = function(req, res, next){
        if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token.
          try{
            var authToken;
            req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : "";
            var user = jwt.verify(authToken, 'secretkey');
            if(req.query.userName == user.username){
              next();
            }
            else{
              res.cookie('username', '', {expires: new Date(0)});
              res.cookie('token', '', {expires: new Date(0)});
              return res.status(401).json({"msg": "Authentication required."});
            }
          }
          catch(err){ // if not able to validate the token, then expire all the available token
            res.cookie('username', '', {expires: new Date(0)});
            res.cookie('token', '', {expires: new Date(0)});
            return res.status(401).json({"msg": "Authentication required."})
          }
        }
        else{
          next();
        }
      };

我在相同的app.js文件中使用它来验证某些API。

          app.namespace('/api', function () {
          app.get('/abc', authChecker, abc.cde);

          app.get('/cde', efg.ghi); //authentication not required for this API.

现在我想模块化这个。 我不想在app.js中定义authChecker,而是让它在不同的文件中定义,并使用它类似。 有人可以帮我这里。 我想我们可以通过使用app.js以某种方式实现这一点,但不确定如何。 如果您需要更多信息,请与我们联系。

3 个答案:

答案 0 :(得分:1)

创建auth.js文件,然后将代码导出authChecker这样的函数

var authChecker = function(req, res, next){
  if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token.
    try{
      var authToken;
      req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : "";
      var user = jwt.verify(authToken, 'secretkey');
      if(req.query.userName == user.username){
         next();
      } else {
         res.cookie('username', '', {expires: new Date(0)});
         res.cookie('token', '', {expires: new Date(0)});
         return res.status(401).json({"msg": "Authentication required."});
       }
     } catch(err) { // if not able to validate the token, then expire all the available token
       res.cookie('username', '', {expires: new Date(0)});
       res.cookie('token', '', {expires: new Date(0)});
       return res.status(401).json({"msg": "Authentication required."})
     }
   } else {
     next();
   }
};

module.exports = {
  authChecker: authChecker,
}

app.js像这样导入

var auth = require('./auth.js'); // path to auth.js file
app.get('/abc', auth.authChecker, abc.cde);

在此处详细了解nodejs模块:https://nodejs.org/api/modules.html

答案 1 :(得分:1)

创建新文件:

  

authChecker.js

var authChecker = function(req,res,next) {
//your code goes here
}
export default authChecker; // you have to write this line

所以在任何其他js文件中你都可以要求:

var authChecker = require("./pathToAuthChecker");

答案 2 :(得分:1)

您可以将authChecker放在单独的文件中并将其导出以便在app.js

中使用

<强> auth.js

module.exports = {
  authChecker: function(req, res, next){..logic..}
}

<强> app.js

auth = require("auth") //path to auth.js
app.get("/abc", auth.authChecker, function(req, res){});
app.get("/cde", function(req, res){});

假设你的项目布局是:

/root
  |-app.js
  |-auth.js