【发布时间】:2014-10-17 14:17:52
【问题描述】:
我了解在 Web 开发中,用户输入应在客户端和服务器端进行验证。
我很难弄清楚在服务器端验证输入的位置。
例如,在请求通过中间件并到达控制器之后。在控制器中,我有其他模块将接受输入并最终到达目的地然后响应。
是否应该在控制器中完全验证输入,以便在将输入放入其他模块时按预期进行?或者我应该检查接受输入的模块中的输入?或者我应该对控制器中的输入进行“浅层”检查(基本的原始类型检查等)并在模块本身中保留业务逻辑检查(值是正数吗?负数?等)?
示例代码:
控制器.js
var mashUp = require('./mashupService');
var create = function(req, res) {
var user = req.body.user;
var imageName = req.body.imageName;
var description = req.body.description;
//more validation here?
if (!user) {
return ApiResponse(req, res, new Error('no user'));
} else if (!imageName) {
return ApiResponse(req, res, new Error('no image name'));
} else if (!description) {
return ApiResponse(req, res, new Error('no description'));
}
// continue with business
mashUp(user, imageName, description, function(err, id) {
if (err) {
return ApiResponse(req, res, new Error('mashup error'));
}
return ApiResponse(req, res, { id: id });
});
};
`其他模块、库等'
var User = require('./model/user');
function mashUp(user, imageName, desc, callback) {
//more validation here?
User.find({ user: user }, function(err, _user) {
//do stuff
callback(err, id) ;
});
}
module.exports = mashUp
【问题讨论】:
-
您没有有在客户端上进行验证。这可能很好,但不是绝对必要的。
标签: javascript node.js validation