Вопрос

У меня есть сервер 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 я делаю запрос на сообщение с помощью следующего кода:

         $.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")}
        });   
    

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

Спасибо! Стефан

Это было полезно?

Решение

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

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

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top