Node.js 快速4路线设置

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

我正在尝试正确、干净地设置我的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(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]
回答,希望它能帮助您:)