【问题标题】:NodeJS / ExpressJS check valid token parameter before routingNodeJS / ExpressJS 在路由之前检查有效的令牌参数
【发布时间】:2015-06-23 14:08:48
【问题描述】:

我有以下应用代码:

(app.js)

var express = require('express')
  , app = express()
  , port = process.env.PORT || 8082

app.use(require('./controllers'))

app.use(function(req, res, next) {
  res.send('Test')
  next()
})

app.listen(port, function() {
  console.log('Listening on port ' + port)
})

还有两个控制器:

(index.js)

var express = require('express')
  , router = express.Router()

router.use('/projects', require('./projects'))

module.exports = router

(projects.js)

var express = require('express')
  , router = express.Router()

router.get('/:id', function(req, res, next) {
  res.json({project: req.params.id})
})

module.exports = router

这可行,但现在我必须检查我的 url 是否有有效的令牌。 我的网址看起来像 http://server/api/projects?token=abchttp://server/api/projects/:id?token=abc 如果令牌无效,则不应加载/显示任何项目(或其他控制器)。 处理这个问题的最佳方法是什么?在哪里(在 app.js 或 controllers/index.js 中)?

【问题讨论】:

    标签: node.js express parameters


    【解决方案1】:

    使用中间件。

    app.use(function (req, res, next) {
        if (checkToken(req.query.token) {
            return next();
        }
    
        res.status(403).end("invalid token");
    });
    app.use(require('./controllers'))
    

    【讨论】:

    • 谢谢!这就是我要找的
    【解决方案2】:

    您可以在 route 函数中执行此验证,也可以使用 middleware 验证 param,然后执行一些逻辑。

    var express = require('express')
       , router = express.Router()
    
    function validate(req,res,next) {
      if(req.params.id) // some logic
      else other stuff
    
      next();
    }
    
    router.get('/:id', validate, function(req, res, next) {
      res.json({project: req.params.id})
    })
    
    module.exports = router
    

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2020-08-19
      • 2019-07-07
      • 2020-05-17
      • 2021-08-06
      相关资源
      最近更新 更多