Express 4路线设置
我想正确,干净地设置我的快速路线,这是我的routes.js文件:
var tokenCtrl = require('./routes/token'); var expressJwt = require('express-jwt'); var config = require('./config'); module.exports = function (app) { app.route('/api/token') .all(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' //JWT payload will be bound to this value (req.{value}) })) .post('validate', tokenCtrl.validate) .get('generate', tokenCtrl.generate); }
不幸的是,我不能在.post或.get(如上面)中指定路由后缀。 所以我卡住做这样的事情:
var tokenCtrl = require('./routes/token'); var expressJwt = require('express-jwt'); var config = require('./config'); module.exports = function (app) { app.route('/api/token/validate') .all(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' })) .post(tokenCtrl.validate); app.route('/api/token/generate') .all(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' })) .get(tokenCtrl.generate); }
现在这很麻烦。 有没有办法说,我所有的路线将有/api
前缀,然后添加每个控制器的另一个前缀? 有没有更好的办法?
你可以用express.Router()
来为你的api使用单独的路由器。
var express = require('express'); var tokenCtrl = require('./routes/token'); var expressJwt = require('express-jwt'); var config = require('./config'); var router = express.Router(); router.route('/token/validate') .all(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' })) .post(tokenCtrl.validate); router.route('/token/generate') .all(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' })) .get(tokenCtrl.generate); module.exports = router;
然后在你的app.js中,你可以做。
var express = require('express'); var apiRouter = require('./api'); app.use('/api', apiRouter);
然后你可以做同样的/token
,或/validate
和/generate
你可以做的是为ExpressJwt制作一个通用的中间件function,它将自动传递给所有的路由。 并且在您的路由文件中只使用Express Router为“/ token / validate”和“/ token / generate”路由创build端点
var express = require('express'); var tokenCtrl = require('./routes/token'); var expressJwt = require('express-jwt'); var config = require('./config'); var router = express.Router(); // make middleware for expressJwt router.use(expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' })); // define the token validate route router.post('/token/validate',tokenCtrl.validate ); // define the token generate route router.get('/token/generate', tokenCtrl.generate) module.exports = router;
然后,加载这个路由器模块的应用程序,现在前缀'/ api'会自动包含在'token / validate'和'token / generate'端点
var tokenroutes= require('./routesjs'); app.use('/api', tokenroutes);
或者,如果您不想在某些路由中包含expressJwt,则可以执行此操作
像expressJwt中间件只能传递给vaildate路由
var express = require('express'); var tokenCtrl = require('./routes/token'); var expressJwt = require('express-jwt'); var config = require('./config'); var router = express.Router(); // make middleware for expressJwt ej = expressJwt({ secret: config.jwtPrivateKey, userProperty: 'auth' }); // define the token validate route , router.post('/token/validate',ej,tokenCtrl.validate ); // define the token generate route router.get('/token/generate', tokenCtrl.generate) module.exports = router;