无法使用 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 发布