【问题标题】:Data inserted successfully but not reflected in mongo DB using mean stack使用平均堆栈成功插入数据但未反映在 mongo DB 中
【发布时间】:2019-10-22 14:04:25
【问题描述】:

我创建了一个平均堆栈应用程序。 正在将数据从角度传递到节点 js。 在节点 js 中一切正常并获得插入成功消息。但是在数据库中没有找到数据

节点 index.js

// require('./app/route/dart.route.js')(app);
var mongoose = require('mongoose');

// make a connection
mongoose.connect('mongodb://localhost:27017/dart', { useNewUrlParser: true });

// get reference to database
var db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function () {
  console.log("Connection Successful!");
})
app.post('/dart_create', function (req, res) {
   console.log('Request body output '
     + JSON.stringify(req.body));
  try {
    db.collection("darts").insertMany(req.body);
    console.log("Data inserted successfully");
  } catch (e) {
    console.log(e);
  }
});

节点控制台

Angular 浏览器控制台

Mongo DB 截图

请帮助我调试问题。我的数据去了哪里......

【问题讨论】:

    标签: node.js mongodb express mean-stack


    【解决方案1】:

    您对 MongoDB 的插入操作失败,但您的 try and catch 块没有捕获错误,因为插入操作是异步操作。

    所以基本上,有两种方法可以解决这个问题:

    使用async/wait

    app.post('/dart_create', async function (req, res) {
       console.log('Request body output '
         + JSON.stringify(req.body));
      try {
        await db.collection("darts").insertMany(req.body);
        console.log("Data inserted successfully");
      } catch (e) {
        console.log(e);
      }
    });
    

    promises 使用then 语法:

    app.post('/dart_create', function (req, res) {
       console.log('Request body output '
         + JSON.stringify(req.body));
      db
        .collection("darts")
        .insertMany(req.body)
        .then(() => {
          console.log("Data inserted successfully");
        })
        .catch(e => {
          console.log(e);
        })
    });
    

    您应该能够捕获错误并从那里解决您的问题。

    【讨论】:

      【解决方案2】:

      在MongoDB中添加数据是一个异步过程,使用.then或者使用async/await

      使用async/await

      app.post('/dart_create', async function (req, res) {
        try {
          const result = await db.collection("darts").insertMany(req.body);
          console.log("Result", result);
          console.log("Data inserted successfully");
          return result;
        } catch (e) {
          console.log(e);
          return e;
        }
      });
      
      

      插入多个返回响应,比如插入成功时

      {
         "acknowledged" : true,
         "insertedIds" : []
      }
      

      检查insertedIds的可验证性和长度以交叉检查是否全部插入。

      【讨论】:

        猜你喜欢
        • 2017-05-29
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 2017-04-18
        • 2019-05-25
        • 2018-11-29
        • 1970-01-01
        相关资源
        最近更新 更多