Domanda

Ho assistente Node.js e con Exressjs / Mongoose im cercando di inserire alcuni documenti incorporati a un documento. Ecco il codice:

  • il codice del nodo:

      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();          
    });
    

    });

  • da un im jquery facendo richiesta POST con il seguente codice:

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

Quando faccio la richiesta POST nella console nodo c'è un errore: Impossibile chiamare il metodo 'push' di indefinito. Allo stesso punto in Chrome la richiesta è ancora "in sospeso". E se mi metto il server di nuovo (anche dopo 10sec) la richiesta di "arrivare" e il record viene inserito, ma con nuova sessione e im in grado di ottenere il nome utente (che era la mia idea iniziale). Qualcuno faccia questo scenario?

Grazie! Stefan

È stato utile?

Soluzione

Si dovrebbe davvero mettere il codice che contiene il collegamento alla mangusta, così come le definizioni dello schema di fuori del callback per il percorso. Al momento si ricollegare alla mangusta e ridefinire tutti gli schemi con ogni richiesta di pagina.

Quindi, il seguente codice dovrebbe rimanere al di fuori della richiamata percorso:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top