首页 > 解决方案 > 猫鼬返回空数组(我尽我所能)

问题描述

架构:文件名: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 Connected

{ _id:5fab21a3931694001290326e,uname:'guest',通过:'guest'}

凉爽的: []


.find() 的输出为空。并且就在我输入一个条目之前,该条目甚至显示在控制台中。我看到了复数的东西,它不起作用。

请帮忙。

标签: javascripthtmlmongodbmongoosemongodb-query

解决方案


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

推荐阅读