首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >特快4线路设置

特快4线路设置
EN

Stack Overflow用户
提问于 2014-12-12 20:18:50
回答 2查看 942关注 0票数 1

我试图正确和干净地设置我的快车路线,这是我的routes.js文件:

代码语言:javascript
运行
复制
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中指定路由后缀(如上面所示)。所以我被困在这样的事情上:

代码语言:javascript
运行
复制
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前缀,然后在每个控制器上添加另一个前缀?有更好的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-12 20:51:29

您可以使用单独的路由器为您的api与express.Router()

代码语言:javascript
运行
复制
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中你可以做到。

代码语言:javascript
运行
复制
var express = require('express');
var apiRouter = require('./api');

app.use('/api', apiRouter);

然后您可以执行相同的/token,或/validate/generate

票数 2
EN

Stack Overflow用户

发布于 2014-12-12 21:18:08

您可以做的是,为ExpressJwt创建一个通用的中间件函数,它将自动传递到所有路由。在您的路由中,文件只为'/token/validate‘和'/token/generate’与Express路由器建立端点

代码语言:javascript
运行
复制
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‘将自动包含在进一步的“令牌/验证”和“令牌/生成”端点中。

代码语言:javascript
运行
复制
var tokenroutes= require('./routesjs');
app.use('/api', tokenroutes);

或者,如果您不想在某些路由中包括expressJwt,您可以这样做

就像expressJwt一样,中间件只能传递到vaildate路由

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27451489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档