我是新来的。尝试设置一个中间件来构建一个字段黑名单,这取决于用户的角色,因此管理字段对常规访问者来说是不可见的。
不过,我似乎没办法把事情做好。在app.param()方法中是否可能有多个中间件?
'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();
});
};发布于 2015-12-17 00:19:55
不过,我似乎没办法把事情做好。在app.param()方法中是否可能有多个中间件?
不是的。
文档说只收到一个回调(而不是像eg那样的多个表示法)。.delete())。
您可以在businessByID()或其他app.param('user', ...)中加载您的blacklistFields,例如,根据用户角色填充blacklistFields。
您可以在其他地方设置所需的中间件,如:app.route('/api/*').all(fillBlacklistFields)。
请注意:
中间件功能是按顺序执行的,因此中间件包含的顺序非常重要。
https://stackoverflow.com/questions/34321644
复制相似问题