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;