Impossible d'insérer à MongoDB avec Node.js et Mongoose
Question
J'ai serveur Node.js et Exressjs / Mongoose im essayant d'insérer des documents intégrés à un document. Voici le code:
-
le code de noeud:
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(); });
});
-
à partir d'un im jquery faisant une requête POST avec le code suivant:
$.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")} });
Quand je fais la demande POST dans la console il y a noeud est une erreur: « push » Ne peut pas appeler la méthode de non défini. Au même point dans Chrome la demande est toujours « en attente ». Et si je commence à nouveau le serveur (même après 10sec) la demande « arriver » et l'enregistrement est inséré, mais avec une nouvelle session et im incapable d'obtenir le nom d'utilisateur (ce qui était mon idée initiale). Est-ce que quelqu'un face à ce scénario?
Merci! Stefan
La solution
Vous devriez vraiment mettre le code contenant la connexion à mangouste, ainsi que les définitions de schéma en dehors du rappel de l'itinéraire. En ce moment, vous Rebrancher Mongoose et redéfinissent tous les schémas à chaque demande de page.
Ainsi, le code suivant doit rester en dehors du rappel d'itinéraire:
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);