如何减lessif语句的数量

您好我自学MEAN堆栈,并有一个关于如何减less如果在我的代码检查的问题。

基本上这是由用户填写他/她的设置页面,然后点击input我们然后发送数据到服务器,所以我们可以更新mongo。

唯一的办法,我似乎得到这个工作,允许用户编辑某些领域,而不是所有是确保发送到服务器的数据不等于空,但肯定必须有一个更好的方法,然后通过运行如果每个领域的声明。

有问题的代码是这样的

//user.username = req.body.username; if ( age != null) { user.age = age; } if ( bio != null) { user.bio = bio; } if ( location != null) { user.location = location; } if ( team != null) { user.team = team; } if ( tags != null) { user.tags = tags; } if ( email != null) { user.email = email; } 

客户端代码

  $scope.savesettings = function(provider){ var theUser = JSON.parse(localStorage.getItem("User-Data")); var user = theUser["_id"]; var request = {}; var request = { user: user, username: $scope.settings_username, email: $scope.settings_email, age: $scope.settings_age, location: $scope.settings_location, team: $scope.settings_team, bio:$scope.settings_bio, profilebanner: $scope.settings_profilebanner, avatar: $scope.settings_avatar }; console.log(request); //send to server $http.put('api/social/updatesettings', request).success(function(response){ alertify.success("Your settings have been successfully saved."); localStorage.clear(); localStorage.setItem('User-Data', JSON.stringify(response)); }).error(function(error){ alertify.error("Hmmm an issue has occured."); }); }; 

服务器代码

 var User = require('../../datasets/userModel'); 

module.exports.updatesettings = function(req,res){

  var age = req.body.age; var bio = req.body.bio; var location = req.body.location; var team = req.body.team; var tags = req.body.tags; var email = req.body.email; var profilebanner = req.body.profilebanner; var avatar = req.body.avatar; User.findOne({_id: req.body.user}, function (err, user){ //user.username = req.body.username; if ( age != null) { user.age = age; } if ( bio != null) { user.bio = bio; } if ( location != null) { user.location = location; } if ( team != null) { user.team = team; } if ( tags != null) { user.tags = tags; } if ( email != null) { user.email = email; } user.save(function(err){ if (err){ console.log(err); res.status(500).send(); //res.json(user); } else { console.log("success"); res.json(user); } }) }); 

};

考虑使用Object.assign 。 它合并两个或更多的对象,后者优先。 以下假定data是一个包含你的agebio等等的对象, user就是你的user对象。

 var results = Object.assign({}, user, data); 

有这样的$.extend ,如果你碰巧使用jQuery, $.extend大多做同样的工作。

您可以将所有属性添加到用户对象。

 var user = { age: age, bio: bio, location: location } 

然后删除空值的键。

 for (var key in user) { if (user[key] === null) { delete user[key]; } } 

如何传递一个variables数组,并使用some来查看它们是否为null

 function isComplete(args) { return !args.some(function(el) { return el === null; }); } var age = null; var bio = 'Something'; var location = null; isComplete([age, bio, location]); // false 

if不是问题。 问题是你向用户显示他们不应该看到的字段,所以问题出现在表示层中。

修复这一系列if就像在地毯下扫除灰尘,似乎你想为你的用户angular色,所以在你的代码中明确和易于理解。

你可以用服务器端生成的HTML来解决这个问题,就像这样(语法可能是错误的,但我希望你明白了):

 <% if (user.canSetTeam()) { %> <input type="text" name="team" /> <% } %> 

所以在你的HTML中,你将拥有正确的字段。

看看http://expressjs.com/en/guide/using-template-engines.html