Node.js 快速4路线设置
我正在尝试正确、干净地设置我的Express routes,这是我的routes.js文件:Node.js 快速4路线设置,node.js,express,Node.js,Express,我正在尝试正确、干净地设置我的Express routes,这是我的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(express
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()
然后在app.js中,您可以执行以下操作
var express = require('express');
var apiRouter = require('./api');
app.use('/api', apiRouter);
然后,您可以执行相同的
/token
,或者/validate
和/generate
您可以为api使用单独的路由器和express.router()
然后在app.js中,您可以执行以下操作
var express = require('express');
var apiRouter = require('./api');
app.use('/api', apiRouter);
然后您可以执行相同的
/token
,或者/validate
和/generate
您可以做的是,为ExpressJwt创建一个通用的中间件功能,该功能将自动传递给所有路由。在路由文件中,仅使用Express Router为“/token/validate”和“/token/generate”路由创建端点
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”将自动包含在进一步的“令牌/验证”和“令牌/生成”端点中
var tokenroutes= require('./routesjs');
app.use('/api', tokenroutes);
或者,如果您不想在某些路线中包括expressJwt,您可以这样做
像expressJwt中间件一样,只能传递到最新路径
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;
您可以做的是,为ExpressJwt创建一个通用的中间件函数,该函数将自动传递给所有路由。在路由文件中,仅使用Express Router为“/token/validate”和“/token/generate”路由创建端点
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”将自动包含在进一步的“令牌/验证”和“令牌/生成”端点中
var tokenroutes= require('./routesjs');
app.use('/api', tokenroutes);
或者,如果您不想在某些路线中包括expressJwt,您可以这样做
像expressJwt中间件一样,只能传递到最新路径
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;
“我不能在.post或.get(如上所述)中指定路由后缀”您能详细说明吗?这两个代码的工作原理完全相同:)。如果我做了
app.route('/prefix/).post('/endpoint',function(){})
我会得到以下错误:error:route.post()需要回调函数,但得到了一个[object String]
相应的回答,希望它能帮助你:)“我不能在.post或.get(如上所述)中指定路由后缀”你能详细说明吗?这两个代码的工作原理完全相同:)。如果我执行app.route('/prefix/).post('/endpoint',function(){})
我会得到以下错误:错误:route.post()需要回调函数,但得到了相应的[object String]
回答,希望它能帮助您:)