Node.JS Express 4-Mongoose不保存数据
我正在尝试使用和保存数据 我所做的就是这样-Node.JS Express 4-Mongoose不保存数据,node.js,mongodb,express,mongoose,bluebird,Node.js,Mongodb,Express,Mongoose,Bluebird,我正在尝试使用和保存数据 我所做的就是这样- "MONGO_URI": "mongodb://localhost:27017/express_test", "MONGO_OPTIONS": { "db": { "safe": true }, "name":"express_test" } bin/www 把这个放在控制台里- Successfully Connected to Mon
"MONGO_URI": "mongodb://localhost:27017/express_test",
"MONGO_OPTIONS": {
"db": { "safe": true },
"name":"express_test"
}
bin/www
把这个放在控制台里-
Successfully Connected to Mongo-DB` - So, MongoDB connected successfully
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
models/post.js
app.js
在那之后,我把它放在控制台里-
Successfully Connected to Mongo-DB` - So, MongoDB connected successfully
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
但是,没有保存任何内容,一个证据是-
我找到了这个-
使用后
更新-
我的数据库配置是这样的-
"MONGO_URI": "mongodb://localhost:27017/express_test",
"MONGO_OPTIONS": {
"db": { "safe": true },
"name":"express_test"
}
那么,有人能帮忙吗,为什么它什么都不保存呢
提前感谢您的帮助。此功能是新车型的快捷方式。您正在尝试。创建模型的实例,而不是简单的对象。查看他们的快速示例
Mongoose数据函数的返回只是将来运行异步任务的承诺,日志记录在很大程度上是毫无意义的。用于等待承诺得到解决
代码中也缺少错误处理,可能会抛出一些错误。使用承诺错误处理
Post.create({ created_by: ""+Math.random() })
.then(function (result) {
console.log('Saved' result)
})
.catch(function (err) {
console.error('Oh No', err)
})
所有这些都可以通过回调来实现(比如Mongoose docco的例子),但是承诺,尤其是蓝鸟承诺更好 我只是使用以下语法组合来创建和保存我的模型:
var myPage = new LandingPage({
user:req.user,
slug: req.body.slug,
}).save(function(err,savedModel){
if(!err){
console.log(savedModel);
}
});
将模型导入为时,您在app.js
模块中调用了错误的模型
var Post_Data = require("./models/post"); // <-- Post_Data model never used
....
....
您需要调用并使用正确的型号。因此,我建议您重新编写app.js
模块,使用方法如下:
var Post = require("./models/post"); // <-- import correct Post model
....
....
router.get('/', function(req, res, next) {
var post = new Post({ created_by: ""+Math.random() });
post.save().then(function(post) {
console.log(post); // <-- newly created post
res.render('index', {
title: 'Express',
site_name: 'Our Site',
layout: 'templates/layout'
});
})
.catch(function(err) {
console.error('Oopsy', err);
});
});
var Post=require(“./models/Post”);// 因此,如果您通过调用newpost(values)
在内存中创建文档,那么您将使用Post.save(cb)保存文档代码>而不是“Post.create(Post)”<代码>,但我认为潜在的问题(尽管根据您显示的代码不容易确定)是您正在连接MongoDB驱动程序,而不是mongoose本身。您的
db`变量没有显示在您发布的代码中声明,因此我将其作为一种假设
也就是说,如果我是对的,您需要调用mongoose.connect
或mongoose.createConnection
,以便mongoose知道它已连接到数据库并将文档保存到数据库中。您可以将现有连接传递给mongoose,因此,如果您已经这样做了,那么我为我的错误假设道歉 如果通过require将post架构存储在变量中,则可以使用该变量
var Post_Data = require("./models/post");
因此可以使用新的Post_数据
无需使用var Post=mongoose.model(“Post”)代码>因为您已经导出了此架构module.exports=mongoose.model('Post',postSchema)代码>
你可以试试这个:
var Post_Data = require("./models/post");
router.get('/', function(req, res, next)
{
var post = new Post_Data({created_by: ""+Math.random()});
post.save(function(error, data) {
if(error) {
return res.status(500).send({error: 'Error occurred during create post'});
}
return res.render('index',{
title : 'Express',
site_name : 'Our Site',
layout : 'templates/layout'
});
});
});
你自己试过吗?请不要试图复制其他人的答案来回答问题。此代码来自我的一个生产代码,而不是复制粘贴和它完全工作!嗨,马特,它不工作了。有其他方法吗?Mongoose确实有一个习惯,当您没有打开连接时,它会默默地失败,尽管如果您看到连接消息并且没有连接错误
,那么这是不可能的。Mongoose.model('Post')
如果模型尚未设置,它会返回MissingSchemaError
。
var Post_Data = require("./models/post");
router.get('/', function(req, res, next)
{
var post = new Post_Data({created_by: ""+Math.random()});
post.save(function(error, data) {
if(error) {
return res.status(500).send({error: 'Error occurred during create post'});
}
return res.render('index',{
title : 'Express',
site_name : 'Our Site',
layout : 'templates/layout'
});
});
});