Не удается вставить в MongoDB с Node.js и Mongoose - PullRequest
1 голос
/ 11 января 2012

У меня есть сервер Node.js, и с помощью Exressjs / Mongoose я пытаюсь вставить некоторые документы в документ.Вот код:

  • код узла:

      app.post('/addcomment/:id', function(request, response){  
    var   sys       = require('util')
        , mongoose  = require('mongoose');
    
    mongoose.connect('mongodb://localhost/test');
    Schema = mongoose.Schema;
    
    var CommentSchema = new Schema({
        descr: String    
    });
    var IssuesSchema = new Schema({
      name: String,
      comment: [CommentSchema]
    });
    
    mongoose.model('tasks', IssuesSchema);
    var Issues = mongoose.model('tasks');
    var taskid = request.params.id;
    
    var user = "test";
    var comment = request.param('descr');    
    
    Issues.findOne({_id: taskid}, function(err,item)
    {
      item.comment.push({descr:comment, posteddate: posteddate, user: user});
      item.save();
      response.writeHead(200,{"Content-Type": "text/plain"});
      response.write(JSON.stringify(t));
      response.end();          
    });
    

    });

  • из jquery im makePOST-запрос со следующим кодом:

         $.ajax({
          type: 'POST',
          url: "http://myhost/addcomment/123",
          async: false,
          timeout: 5000,
          cache: false,
          data: { descr:  $('#comment').val() }
          ,success: function(data){ 
              console.log(data);
          ,error: function(){console.log("err")}
        });   
    

Когда я делаю POST-запрос в консоли узла, возникает ошибка: Невозможно вызвать метод push из undefined.В тот же момент в Chrome запрос все еще находится на рассмотрении.И если я снова запускаю сервер (даже через 10 секунд), запрос «прибывает» и запись вставляется, но с новым сеансом, и я не могу получить имя пользователя (что было моей первоначальной идеей).Кто-нибудь сталкивался с таким сценарием?

Спасибо!Stefan

1 Ответ

1 голос
/ 11 января 2012

Вы должны действительно поместить код, содержащий соединение с mongoose, а также определения схемы за пределы обратного вызова для маршрута.На данный момент вы повторно подключитесь к mongoose и заново определите все схемы с каждым запросом страницы.

Таким образом, следующий код должен остаться вне обратного вызова маршрута:

var   sys       = require('util')
    , mongoose  = require('mongoose');

mongoose.connect('mongodb://localhost/test');
Schema = mongoose.Schema;

var CommentSchema = new Schema({
    descr: String    
});
var IssuesSchema = new Schema({
  name: String,
  comment: [CommentSchema]
});

mongoose.model('tasks', IssuesSchema);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...