mongoose возвращает пустой массив (я пробовал все, что мог)

#javascript #html #mongodb #mongoose #mongodb-query

#javascript #HTML #mongodb #mongoose #mongodb-запрос

Вопрос:

Схема: имя файла: Login.js

 const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const LoginSchema = new Schema({
  uname: {
    type: String,
    required: true
  },
  pass: {
    type: String,
    required: true
  }
});

module.exports = Login = mongoose.model('login', LoginSchema);  

index.js файл:

 const express = require('express');
const mongoose = require('mongoose');

const app = express();

// Connect to MongoDB
mongoose
  .connect(
    'mongodb://mongo:27017/docker-node-mongo',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log(err));
  
const Login = require('./models/Login');

app.post('/',(req,res) => {
    
    
        const newLogin = new Login({
            uname: req.body.uname,
            pass: req.body.pass
          });
        console.log(newLogin);
        newLogin.save();

    Login.find({},function (err, logins) {
        if (err) return console.error(err);
        console.log("cool: ",logins);
      });
    res.redirect('/main');
});  

Вот вывод в консоль:
MongoDB подключен

{ _id: 5fab21a3931694001290326e, uname: ‘гость’, pass: ‘гость’ }

круто: []


Вывод .find() пуст. И как раз перед тем, как я ввел запись, и эта запись даже отображается в консоли. Я видел множественное число, и оно не работает.

Пожалуйста, помогите.

Ответ №1:

Mongodb save() является асинхронным, поэтому он не ожидает сохранения документа. Когда он пытается найти документ, он не может быть найден, потому что он еще не был сохранен. Вы можете использовать async / await, чтобы он ожидал процесса сохранения, а затем продолжался.

 app.post('/', async (req,res) => {
        
            const newLogin = new Login({
                uname: req.body.uname,
                pass: req.body.pass
              });
            console.log(newLogin);
            await newLogin.save();
    
        Login.find({},function (err, logins) {
            if (err) return console.error(err);
            console.log("cool: ",logins);
          });
        res.redirect('/main');
    });
  

Комментарии:

1. спасибо, у меня есть еще один вопрос: в схеме я хочу жестко указать предопределенное имя пользователя и пароль как гость, гость. Как это сделать?? Спасибо

2. Вы можете указать значение по умолчанию в схеме. Например, по умолчанию: «Гость»