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

Posted

技术标签:

【中文标题】无法使用 Node.js 和 Mongoose 插入 MongoDB【英文标题】:Can't insert to MongoDB with Node.js and Mongoose 【发布时间】:2012-02-07 21:07:41 【问题描述】:

我有 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 即时使用以下代码发出 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 秒之后),请求“到达”并插入记录,但使用新会话并且我无法获取用户名(这是我最初的想法)。 有人遇到过这种情况吗?

谢谢! 斯蒂芬

【问题讨论】:

【参考方案1】:

您确实应该将包含与 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);

【讨论】:

非常感谢!!! (我昨天刚从 node/mongo/express 开始,还有很多东西对我来说不干净) 很高兴为您提供帮助,您可以在这里查看一个使用 Node 和 Mongoose 的真实项目:github.com/alexyoung/nodepad 它的教程在这里:dailyjs.com/tags.html#lmawa

以上是关于无法使用 Node.js 和 Mongoose 插入 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 无法使用 Promise、Mongoose 和 GET 请求推送到全局数组

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布

如何让 node.js 使用 mongoose 连接到 mongolab

无法使用 mongoose、Node.js 将数据插入到 mongoDB 中的 Document 字段中