【问题标题】:Unhandled rejection: Data is not getting inserted into Mongodb未处理的拒绝:数据未插入到 Mongodb
【发布时间】:2020-06-07 04:52:44
【问题描述】:

服务器从 8080 开始 获取 / 304 - - 1.952 毫秒 (node:6139) UnhandledPromiseRejectionWarning: MongooseServerSelectionError: bad auth 认证失败。 在新的 MongooseServerSelectionError (/Users/abc/Desktop/success/node_modules/mongoose/lib/error/serverSelection.js:22:11) 在 NativeConnection.Connection.openUri (/Users/abc/Desktop/success/node_modules/mongoose/lib/connection.js:808:32) 在 Mongoose.connect (/Users/abc/Desktop/success/node_modules/mongoose/lib/index.js:333:15) 在对象。 (/Users/abc/Desktop/success/pages/server.js:18:10) 在 Module._compile (internal/modules/cjs/loader.js:1158:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10) 在 Module.load (internal/modules/cjs/loader.js:1002:32) 在 Function.Module._load (internal/modules/cjs/loader.js:901:14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) 在内部/main/run_main_module.js:18:47 (节点:6139) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:6139)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。 获取 / 304 - - 0.320 毫秒 获取 / 304 - - 0.236 毫秒 获取 / 304 - - 0.210 毫秒

当我为我的 serverjs 运行端口 8080 时,文件可以工作,但没有数据进入我的 mongoDB,并且我在终端上收到上述错误。我只有一个 server.js 页面和一个 index.tsx 页面。我的 index.tsx 页面有一个简单的 Hello world,我正在尝试使用 server.js 文件连接 Mongodb。

这是我的代码:

import express from 'express';
import { connect, connection, Schema as _Schema, model } from 'mongoose';
import morgan from 'morgan';
import path from 'path';

const app = express();
const PORT = process.env.PORT || 8080;
//Success

const MONGODB_URI = 'mongodb+srv://xxxxxxxxxx';

mongoose.connect(MONGODB_URI || 'mongodb://localhost/success', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

mongoose.connection.on('connected', () => {
        console.log('Mongoose is connected');

    })

//Schema
const Schema = _Schema;
const BlogPostSchema = new Schema({
    title: String,
    body: String,
    date: {
        type: String,
        default: Date.now()
    }
});

//Model
const BlogPost = model('BlogPost', BlogPostSchema);

//Saving data to our mongoDB
const data = {
    title: 'welcome',
    body: 'first post'
};

const newBlogPost = new BlogPost(data);
newBlogPost.save((error) => {
    if (error) {
        console.log("Somethign happened");
    } else {
        console.log("data saved");
    }

});

//HTTP request logger
app.use(morgan('tiny'));

//Routes
app.get('/', (req, res) => {
    const data = {
        username: 'caa',
        age: 5
    };
    res.json(data);

});

app.get('/api/name', (req, res) => {
    const data = {
        username: 'caa',
        age: 5
    };
    res.json(data);

});

app.listen(PORT, console.log(`Server is starting at ${PORT}`));

【问题讨论】:

  • 这似乎是一个身份验证问题。您的数据库是否受到某种身份验证的保护?如果是,您是否将身份验证详细信息添加到MONGODB_URI?

标签: reactjs mongodb typescript next.js


【解决方案1】:

我认为这是因为 mongoose.connect 是异步的(从文档中不是很清楚)。尝试将您的代码放在“已连接”事件中,看看它是否有效:

mongoose.connection.on('connected', () => {
    console.log('Mongoose is connected');
    //Schema
    const Schema = _Schema;
    const BlogPostSchema = new Schema({
        title: String,
        body: String,
        date: {
            type: String,
            default: Date.now()
        }
    });

    //Model
    const BlogPost = model('BlogPost', BlogPostSchema);

    //Saving data to our mongoDB
    const data = {
        title: 'welcome',
        body: 'first post'
    };

    const newBlogPost = new BlogPost(data);
    newBlogPost.save((error) => {
        if (error) {
            console.log("Somethign happened");
        } else {
            console.log("data saved");
        }

    });

    //HTTP request logger
    app.use(morgan('tiny'));

    //Routes
    app.get('/', (req, res) => {
        const data = {
            username: 'caa',
            age: 5
        };
        res.json(data);

    });

    app.get('/api/name', (req, res) => {
        const data = {
            username: 'caa',
            age: 5
        };
        res.json(data);

    });

    app.listen(PORT, console.log(`Server is starting at ${PORT}`));

})

【讨论】:

  • 添加代码后,出现同样的错误。错误:(node:6170) UnhandledPromiseRejectionWarning: MongooseServerSelectionError: bad auth Authentication failed.
  • 那么请确保 mongoDb 正在运行,并且您通过了正确的配置
  • 现在我收到了这个错误,我缺少的是密码。我也输入了密码,如何解决此错误。 (node:6210) UnhandledPromiseRejectionWarning: MongoParseError: URI does not have hostname, domain name and tld
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 2019-10-13
  • 2019-03-15
  • 2016-07-21
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多