Node.JS Express 4 - Mongoose 不保存数据

标签 node.js mongodb express mongoose bluebird

我正在尝试将数据保存在 MongoDB 中与 MongooseExpress.JS 4Bluebird .

我做的是这样的-

bin/www

var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');

.......
.......

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function()
{// successfully connected!
    console.log("Successfully Connected to Mongo-DB");
});

然后在控制台中得到它-

Successfully Connected to Mongo-DB` - So, MongoDB connected successfully

模型/post.js

var mongoose = require('mongoose');

var postSchema = new mongoose.Schema({
    created_by: String,     //should be changed to ObjectId, ref "User"
    created_at: {type: Date, default: Date.now},
    text: String
});

module.exports = mongoose.model('Post', postSchema);

应用程序.js

var Post_Data = require("./models/post");
....
....
router.get('/', function(req, res, next)
{
    var Post = mongoose.model("Post");

    var post    =   new Post({
                            created_by: ""+Math.random()
                        });

    console.log( Post.create(post) );


    res.render(
                'index',
                {
                    title       :   'Express',
                    site_name   :   'Our Site',
                    layout      :   'templates/layout'
                }
            );
});

然后我在控制台中得到这个-

Promise {
  _bitField: 0,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined }

但是,什么都没有保存,证明是 -

我找到了这个-

enter image description here

使用后MongoBooster .

更新-

我的数据库配置是这样的-

"MONGO_URI": "mongodb://localhost:27017/express_test",
"MONGO_OPTIONS": {
                    "db": { "safe": true },
                    "name":"express_test"
                }

所以,任何人都可以帮忙,为什么它没有保存任何东西?

在此先感谢您的帮助。

最佳答案

.create()函数是 new Model.save() 的快捷方式.您正在尝试.create Model 的实例而不是简单的对象。参见 Constructing documents in Mongoose's Models documentation对于他们的快速示例。

Mongoose 数据函数的返回只是对将来要运行的异步任务的 promise ,日志记录在很大程度上毫无意义。使用 .then()等到 promise 已经解决。

您的代码中也缺少错误处理,那里可能会抛出一些东西。使用.catch()用于 promise 错误处理。

Post.create({ created_by: ""+Math.random() })
.then(function (result) {
  console.log('Saved' result)
})
.catch(function (err) {
  console.error('Oh No', err)
})

所有这些都可以通过回调来完成(如 Mongoose docco 示例),但 promise ,尤其是 Bluebird promise 更好。

关于Node.JS Express 4 - Mongoose 不保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842920/

相关文章:

java - 如何使用 Java Mongo DB 驱动程序版本 3 将 BasicDBObject 转换为 Mongo 文档?

node.js - npm 脚本按顺序与expressjs

javascript - 如何在nodejs中将mysql中的数据显示到html div?

ios - Node.js 使用的 websocket 版本是哪个?

node.js - Nodejs 分段文件上传,生成的文件比原始文件大

node.js - Socket.io 0.9 和 1.0 向所有房间成员广播

javascript - Mongodb 获取文档在集合中的位置

c++ - 与 CMake 链接的 C/C++ 库

javascript - Express JS - 无法将数组推送到 MongoDB 中的表

node.js - 无法在hostmonster上运行express服务器