Данные вставлены успешно, но не отражены в базе данных Монго с использованием среднего стека - PullRequest
0 голосов
/ 07 июня 2019

Я создал приложение среднего стека. Передаю данные от углового до узла 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);
  }
});

Узел консоли

enter image description here

Угловая консоль браузера

enter image description here

Снимок экрана Mongo DB enter image description here

Пожалуйста, помогите мне отладить проблему. Куда делись мои данные ....

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Ваша операция вставки в MongoDB не выполняется, но ваш блок try и 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);
  }
});

Использование синтаксиса then для promises:

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

Вы должны быть в состоянии отследить ошибку и решить вашу проблему оттуда.

0 голосов
/ 07 июня 2019

Добавление данных в 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 для перекрестной проверки все вставлены или нет.

...