2014-11-10 3 views
0

Я следую scotch's учебник, поэтому я эта схема пользователя:node.js + мангуст + HTTP PUT не работает

var userSchema = mongoose.Schema({ 

    local   : { 
     email  : String, 
     password  : String, 
    }, 
    facebook   : { 
     id   : String, 
     token  : String, 
     email  : String, 
     name   : String 
    }, 
    twitter   : { 
     id   : String, 
     token  : String, 
     displayName : String, 
     username  : String 
    }, 
    google   : { 
     id   : String, 
     token  : String, 
     email  : String, 
     name   : String 
    } 

}); 

Я пытаюсь сделать HTTP поставить, чтобы обновить некоторые данные с x- WWW-форм-urlencoded, но я не в состоянии установить поля, это то, что у меня есть:

PUT /teacherup HTTP/1.1 
Host: localhost:8080 
Cache-Control: no-cache 
Content-Type: application/x-www-form-urlencoded 

email=example%40gmail.com&password=randompass 

Как я могу сделать соответствующий HTTP поместить и установить эти поля? Я также хотел бы знать, как это сделать с JSON.

- Обновление с путы

Вот HTTP положить:

app.put('/teacherup', isLoggedIn, function(req, res) { 
     if(req.user.usertype == 1) 
     { 
      util.updateDocument(req.user, userschema, req.body); 
      req.user.save(function(err) { 
       if (err) 
        throw err; 
      }); 
      res.send(200, {message : 'Teacher saved!'}); 
     } 
     else 
     { 
      res.send(406, {message : 'Not a teacher!'}); 
     } 
    }); 

- Способы обновления для сохранения документа

Я использую эти методы для обновления дока

exports.updateDocument = function(doc, SchemaTarget, data) { 
    for (var field in SchemaTarget.schema.paths) { 
     if ((field !== '_id') && (field !== '__v')) { 
      var newValue = getObjValue(field, data); 
      console.log('data[' + field + '] = ' + newValue); 
      if (newValue !== undefined) { 
       setObjValue(field, doc, newValue); 
      } 
     } 
    } 
    return doc; 
}; 

function getObjValue(field, data) { 
    return _.reduce(field.split("."), function(obj, f) { 
     if(obj) return obj[f]; 
    }, data); 
} 

function setObjValue(field, data, value) { 
    var fieldArr = field.split('.'); 
    return _.reduce(fieldArr, function(o, f, i) { 
    if(i == fieldArr.length-1) { 
      o[f] = value; 
    } else { 
      if(!o[f]) o[f] = {}; 
    } 
    return o[f]; 
    }, data); 
} 
+0

Большая сделка. Где код контроллера? –

+0

только что обновлено с помощью http put –

+0

Ничего общего с оценкой Rep. Просто качество вопроса. 'req.params' является своего рода стандартом во всех веб-фреймворках. Вы даже не искали в Интернете «экспресс-запросы»? Это тот ответ, который вы должны ожидать от своего босса, когда вы спрашиваете. –

ответ

0

Я показываю вам код на стороне сервера для вставки нового документа с использованием «экспресс» и «монгой» OOSE. Надеюсь, это поможет вам.

var app = require('express)(), 
    mongoose=require('mongoose'), 
    userModel=mongoose.model("user", userSchema); 
app.put('/teacherup', update); 
update=function(req,res){ 
    new userModel 
     .save(object)//I have not created the object you have to create it according to yourschema 
     .exec(function(err, result) { 
      if (err) { 
       console.log(err); 
      } else { 
       console.log("Successfully inserted"); 
      } 
     }); 
} 
+0

Расскажите, что. Если вы обновите это, чтобы объяснить, что делает OP в их функциональном коде, неправильно и как правильно это делать здесь, тогда вы получаете мой возвышенный. И довольно быстро, так как это справедливо, и вы все равно не сделали этого. –