NodeJS / ExpressJS 在路由前检查有效的令牌参数
NodeJS / ExpressJS check valid token parameter before routing
我有以下应用程序代码:
(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 是否有有效令牌。
我的 url 看起来像 http://server/api/projects?token=abc or http://server/api/projects/:id?token=abc
如果令牌无效,则不应加载/显示任何项目(或其他控制器)。
处理此问题的最佳方法是什么以及在哪里(在 app.js 或 controllers/index.js 中)?
使用中间件。
app.use(function (req, res, next) {
if (checkToken(req.query.token) {
return next();
}
res.status(403).end("invalid token");
});
app.use(require('./controllers'))
您可以在 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
我有以下应用程序代码:
(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 是否有有效令牌。 我的 url 看起来像 http://server/api/projects?token=abc or http://server/api/projects/:id?token=abc 如果令牌无效,则不应加载/显示任何项目(或其他控制器)。 处理此问题的最佳方法是什么以及在哪里(在 app.js 或 controllers/index.js 中)?
使用中间件。
app.use(function (req, res, next) {
if (checkToken(req.query.token) {
return next();
}
res.status(403).end("invalid token");
});
app.use(require('./controllers'))
您可以在 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