2014-05-21 26 views
0

我有一个应用程序正在对服务器进行ajax调用,以便用猫鼬在数据库中保存用户信息。 Ajax调用看起来是这样的:根据情况,是否有办法允许猫鼬字段未定义?

$.ajax({ 
       type: 'GET', 
       url:"http://localhost:3000/updateuser", 
       data: { 
        _id  : userID, 
        userEvents : events, 
        userGroups : groups, 
        latitude : position.coords.latitude, 
        longitude : position.coords.longitude 
       }, 
       dataType: 'jsonp', 
       contentType: 'application/json', 
       crossDomain: true, 
       success: function(data){ 
        console.log(data); 

       }, 
       error: function(){ 
        console.log('there was an error'); 
       } 
      }); 

远程服务器来保存用户的信息是这样的:

var user = {_id  : req.query._id}; 
var update = { events : req.query.userEvents, 
       groups : req.query.userGroups, 
       latitude : req.query.latitude, 
       longitude : req.query.longitude, 
       timestamp : thisTime}; 

locationModel.update(user,update,{multi:true},function(err,numAffected){ 
    console.log(numAffected); 
    console.log(err); 

,我快到的问题是,有时userEvents或群组作为发送一个空的领域。这一切都取决于用户,我不能保证该字段将被填充。如果该字段为空,我从猫鼬出现以下错误:

undefined 
{ message: 'Cast to string failed for value "undefined" at path "events"', 
    name: 'CastError', 
    type: 'string', 
    value: undefined, 
    path: 'events' } 

有谁知道是否有针对此问题的解决方法吗?如果我不清楚问题中的任何内容,请让我知道。谢谢。

+1

'events:req.query.userEvents || “”'? – WiredPrairie

+0

如果您很高兴在运行更新时覆盖事件,则只能使用@WiredPrairie解决方案。您应该真正构建您的更新对象以适应从前端传入的数据。 –

+0

这绝对会做到这一点。如果事件不存在,覆盖事件实际上会遵循我的应用程序的逻辑。 @WiredPrairie如果你想提交作为答案,我会给你复选标记。 – user3294779

回答

1

如果您不介意文档中的数据将被覆盖,则只需使用||运算符,并且在运算符左侧可以评估的任何时候返回空字符串(或任何其他值)一个“假的”值:

events : req.query.userEvents || ""