无法使用Node.js和Mongoose插入到MongoDB

我有Node.js服务器和Exressjs / Mongoose即时通讯尝试插入一些embedded式文件到文件。 这里是代码:

  • 节点代码:

    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的使用POST请求与下面的代码:

      $.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请求有一个错误:不能调用未定义的方法“推”。 在Chrome浏览器中的同一点,请求仍处于“挂起”状态。 如果我再次启动服务器(甚至在10秒后)请求“到达”和logging插入,但与新的会议,我无法获得用户名(这是我最初的想法)。 有人面对这种情况?

谢谢! 斯特凡

你应该把包含连接的代码放在mongoose身上,以及路由callback之外的模式定义。 目前,您将重新连接到mongoose,并重新定义每个页面请求的所有模式。

所以下面的代码应该停留在路由callback之外:

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