首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.JS Express 4-猫鼬不保存数据

Node.JS Express 4-猫鼬不保存数据
EN

Stack Overflow用户
提问于 2016-08-09 05:45:16
回答 5查看 824关注 0票数 4

我正在用MongoDB蓝鸟猫鼬保存数据。

我所做的就是这样-

垃圾桶/www

代码语言:javascript
复制
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");
});

把这个放在控制台上-

代码语言:javascript
复制
Successfully Connected to Mongo-DB` - So, MongoDB connected successfully

模型/post.js

代码语言:javascript
复制
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);

app.js

代码语言:javascript
复制
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'
                }
            );
});

在那之后我要把这个放在控制台上-

代码语言:javascript
复制
Promise {
  _bitField: 0,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined }

但是,什么也救不了,这证明了-

我发现这个-

在使用MongoBooster之后。

更新-

我的DB配置是这样-

代码语言:javascript
复制
"MONGO_URI": "mongodb://localhost:27017/express_test",
"MONGO_OPTIONS": {
                    "db": { "safe": true },
                    "name":"express_test"
                }

所以,谁能帮帮忙,为什么它什么都不省呢?

提前感谢你的帮助。

EN

回答 5

Stack Overflow用户

发布于 2016-08-09 06:28:49

.create()函数是new Model.save()的快捷方式。您正在尝试.create一个Model实例,而不是一个简单的对象。有关他们的快速示例,请参见在猫鼬模型文档中构建文档

Mongoose数据函数的返回只是未来运行异步任务的承诺,日志记录在很大程度上毫无意义。使用.then()等待承诺得到解决。

您的代码中也缺少错误处理,可能会在其中抛出一些东西。使用.catch()进行承诺错误处理。

代码语言:javascript
复制
Post.create({ created_by: ""+Math.random() })
.then(function (result) {
  console.log('Saved' result)
})
.catch(function (err) {
  console.error('Oh No', err)
})

所有这些都可以通过回调来完成(就像Mongoose docco的例子),但是承诺,特别是蓝鸟的承诺更好。

票数 2
EN

Stack Overflow用户

发布于 2016-08-09 06:33:20

我只是使用这个语法组合来创建和保存我的模型:

代码语言:javascript
复制
var myPage = new LandingPage({
  user:req.user,
  slug: req.body.slug,
}).save(function(err,savedModel){
  if(!err){
    console.log(savedModel);
  }
});
票数 1
EN

Stack Overflow用户

发布于 2016-08-09 08:02:05

在导入模型时,您在app.js模块中调用了错误的模型

代码语言:javascript
复制
var Post_Data = require("./models/post"); // <-- Post_Data model never used
....
....

但是在路由器实现中创建一个新的Post模型实例

代码语言:javascript
复制
var Post = mongoose.model("Post"); // <-- different model

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

你需要调用并使用正确的模型。因此,我建议您重写app.js模块以使用保存()方法,如下所示:

代码语言:javascript
复制
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);
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38842920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档