首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中间件-绑定到中间件

中间件-绑定到中间件
EN

Stack Overflow用户
提问于 2015-12-16 20:36:02
回答 1查看 367关注 0票数 0

我是新来的。尝试设置一个中间件来构建一个字段黑名单,这取决于用户的角色,因此管理字段对常规访问者来说是不可见的。

不过,我似乎没办法把事情做好。在app.param()方法中是否可能有多个中间件?

代码语言:javascript
复制
 'use strict';

/**
 * Module dependencies.
 */
var businessPolicy = require('../policies/businesses.server.policy'),
    business = require('../controllers/businesses.server.controller');

//routes

module.exports = function (app) {
  // Business collection routes
  app.route('/api/businesses/search/:businessField/:value').all(businessPolicy.isAllowed)
    .get(business.read);


  app.route('/api/businesses').all(businessPolicy.isAllowed)
    .get(business.list)
    .post(business.create);

  // Single business routes
  app.route('/api/businesses/:businessId').all(businessPolicy.isAllowed)
    .get(business.read)
    .put(business.update)
    .delete(business.delete);

  // Finish by binding the business middleware
  app.param('businessId', business.blacklistFields, business.businessByID);

};



//controller
exports.blacklistFields = function(req, res, next){

  //create a blacklist of fields based on role here
  next();
}
exports.businessByID = function (req, res, next, id) {

  if (!mongoose.Types.ObjectId.isValid(id)) {
    return res.status(400).send({
      message: 'Business is invalid'
    });
  }

  Business.findById(id).populate('user', 'displayName').select(/*blacklist fields here*/ ).exec(function (err, business) {
    if (err) {
      return next(err);
    } else if (!business) {
      return res.status(404).send({
        message: 'No businesses with that identifier has been found'
      });
    }
    req.business = business;
    next();
  });
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 00:19:55

不过,我似乎没办法把事情做好。在app.param()方法中是否可能有多个中间件?

不是的。

文档说只收到一个回调(而不是像eg那样的多个表示法)。.delete())。

您可以在businessByID()或其他app.param('user', ...)中加载您的blacklistFields,例如,根据用户角色填充blacklistFields

您可以在其他地方设置所需的中间件,如:app.route('/api/*').all(fillBlacklistFields)

请注意:

中间件功能是按顺序执行的,因此中间件包含的顺序非常重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34321644

复制
相关文章

相似问题

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