【问题标题】:My schema doesn't get saved to my database (MongoDB)我的架构没有保存到我的数据库(MongoDB)
【发布时间】:2021-05-21 14:20:30
【问题描述】:

我正在学习一个教程,但在某一点上卡住了。我尝试在 Postman 中发出 POST 请求,但返回了一个我无法解决的错误。错误如下:

(node:3224) UnhandledPromiseRejectionWarning: MongooseError: 操作users.insertOne() 缓冲超时 10000 毫秒后 在超时。 (C:\Users\Murad\Desktop\Full Stack\Node\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:185:20) 在 listOnTimeout (internal/timers.js:549:17) 在 processTimers (internal/timers.js:492:7) (使用node --trace-warnings ... 显示警告的创建位置) (节点:3224)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:3224)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

代码如下

// index.js File
const express = require('express');
const app = express();
const mongoose = require('mongoose');
// const dotenv = require('dotenv');

// Import Routes
const authRoute = require('./routes/auth');

// Route middleware
app.use(express.json());
app.use('/api/user', authRoute);

// dotenv.config();
const myUrl = 'mongodb+srv://murad:<password>@cluster0.ag5vr.mongodb.net/DatabaseName?retryWrites=true&w=majority';

mongoose.connect(myUrl,
    { useNewUrlParser: true, useUnifiedTopology: true },
    () => {
        console.log('Connected to db');
    })



app.listen(3000, () => console.log('Server up and running'));

// My auth.js (router) file
const router = require('express').Router();
const User = require('../model/User');

router.post('/register', async (req, res) => {
    const user = new User({
        name: req.body.name,
        email: req.body.email,
        password: req.body.password
    })
    
        const savedUser = await user.save();
        res.send(savedUser);
    
})

module.exports = router;

// And my User.js (model) file
````const mongoose = require('mongoose');

const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
        min: 6,
        max: 255
    },
    email: {
        type: String,
        required: true,
        min: 6,
        max: 255
    },
    password: {
        type: String,
        required: true,
        min: 6,
        max: 1024
    },
    date: {
        type: Date,
        default: Date.now
    }
})

module.exports = mongoose.model('User', userSchema);

I tried to look up solutions but none seemed to work. Help would be much appreciated! Thanks in advance

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:
    router.post('/register', async (req, res) => {
    const user = new User({
        name: req.body.name,
        email: req.body.email,
        password: req.body.password
    })
        const savedUser = await user.save().catch( e => { console.error(e) 
        res.send(savedUser);
    
    });
    

    尝试使用 catch 来捕获错误

    【讨论】:

    • 我做到了,但是当我尝试发出帖子请求时,它只是抛出了同样的错误。
    • 看起来 mongoose.connect 也返回了一个承诺尝试类似 mongoose.connect(myUrl, { useNewUrlParser: true, useUnifiedTopology: true }, () => { console.log('连接到 db'); }).catch(error => console.error(error));
    【解决方案2】:
    const savedUser = await user.save();
    

    user.save() 返回一个承诺,但你没有处理它

    正确的代码是

    const savedUser = await user.save();
    savedUser
    .then((users)=>
    {
      
    },(err)=>next(err))
    .catch((err)=>next(err))
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      相关资源
      最近更新 更多