Ошибка: MongoError: не авторизован администратором для выполнения команды - PullRequest
0 голосов
/ 04 октября 2019

Итак, я следую вместе с Бо в этом учебном пособии по freeCodeCamp YouTube, обучающемся создавать простое приложение с использованием стека MERN. Однако при использовании Postman я получаю это сообщение об ошибке при попытке отправить POST-запрос на localhost:5000/users/add:

"Error: MongoError: not authorized on admin to execute command { insert: \"users\", documents: [[{_id ObjectIdHex(\"5d96cd3f31092833b8253260\")} {username Andrew} {createdAt 2019-10-04 04:40:31.321 +0000 UTC} {updatedAt 2019-10-04 04:40:31.321 +0000 UTC} {__v 0}]], ordered: true, writeConcern: { w: \"majority\" }, lsid: { id: {4 [40 157 203 39 59 227 66 72 188 54 104 29 179 241 37 148]} }, txnNumber: 2.000000, $clusterTime: { clusterTime: 6743803110960922625, signature: { hash: [61 192 72 112 135 6 249 47 34 239 28 238 196 104 30 46 4 217 216 107], keyId: 6741907548619669504.000000 } }, $db: \"admin\" }"

Последние пару часов я провёл в сети и в нескольких потоках SO Q + Aно я не могу найти решение этой проблемы. Я вижу, что распространенным предложением является предоставление пользователю root-доступа в MongoDB Atlas, но я не уверен, где бы я это реализовал. Я также использую все бесплатные опции, и я прочитал, что, поскольку я использую эти опции, эту ошибку нельзя обойти?

Вот текущий доступ для пользователя, которого я создал для этого проекта: enter image description here

И в разделе «Доступ к сети» я выбрал свой собственный IP-адрес (использование любого адреса не помогло).

Вот код для нашего сервера.js file:

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

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());

const uri = "mongodb+srv://<username>:<password>@cluster0-idjjd.gcp.mongodb.net/admin?retryWrites=true&w=majority"; 
mongoose.connect(uri, { useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
const connection = mongoose.connection;
connection.once('open', () => {
  console.log('MongoDB database connection established successfully!');
});

const exercisesRouter = require('./routes/exercises');
const usersRouter = require('./routes/users');

app.use('/exercises', exercisesRouter);
app.use('/users', usersRouter);

app.listen(port, () => {
  console.log(`The server is running on port ${port}`);
});

Я, конечно, изменил имя пользователя и пароль для себя в переменной uri, просто не хотел вводить их здесь.

И когда я запускаю nodemon server.js, я вижу в терминале:

[nodemon] restarting due to changes...
[nodemon] starting node server.js
The server is running on port 5000
MongoDB database connection established successfully!

Вот код для нашего user.model.js файла:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const userSchema = new Schema ({
  username: {
    type: String,     
    required: true,   
    unique: true,     
    trim: true,       
    minlength: 3      
  },
}, {
  timestamps: true
})

const User = mongoose.model('User', userSchema);

module.exports = User;

А вот код для нашего users.js файла, используемого для маршрутизации:

const router = require('express').Router();
let User = require('../models/user.model');

router.route('/').get((request, response) => {
  User.find() 
    .then(users => response.json(users))
    .catch(error => response.status(400).json(`Error: ${error}`))
});

router.route('/add').post((request, response) => {
  const username = request.body.username;
  const newUser = new User({ username });

  newUser.save()
    .then(() => response.json('User added!'))
    .catch(error => response.status(400).json(`Error: ${error}`))
});

module.exports = router;

Я следовал руководству и даже сравнил свой код с кодомк завершенному репо, и я не могу разобрать никакой разницы, поэтому я не уверен, как исправить эту ошибку.

Опять в Почтальоне я выбираю POST, затем ввод localhost:5000/users/add и выбор Body, затем выберите raw и JSON. Я ввожу следующее:

{
    "username": "Andrew"
}

Если бы кто-нибудь мог помочь мне решить эту проблему, это было бы очень признательно. Опять же, это мой первый опыт использования стека MERN, и мне очень нравится идея использовать MongoDB вместе с Express / React, поэтому я действительно хочу решить эту проблему не только для этого проекта, но и для любых будущих проектов.

Я также читал, что в примерах, подобных моему, отсутствует использование bodyParser;однако, как упоминалось в видео, это больше не нужно, и вместо этого мы можем просто использовать express, как видно из app.use(express.json());. Это правильно?

Спасибо.

1 Ответ

0 голосов
/ 04 октября 2019

Работай! Я изменил ключ URI с:

const uri = "mongodb+srv://<username>:<password>@cluster0-idjjd.gcp.mongodb.net/admin?retryWrites=true&w=majority";

на

const uri = "mongodb+srv://<username>:<password>@cluster0-idjjd.gcp.mongodb.net/test?retryWrites=true&w=majority";

Просто поменял этот бит mongodb.net/admin? на mongodb.net/test? и все работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...