Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.JS Express 4-Mongoose不保存数据_Node.js_Mongodb_Express_Mongoose_Bluebird - Fatal编程技术网

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'
      });
   });
});