Node.js MongoError:未经管理员授权执行命令

时间:2019-10-03 16:45:16

标签: node.js mongodb express mongoose

您好,我试图构建一个自定义Express API以便与MongoDB通信,但是当我尝试使用Postman进行发布请求时,却不断收到此错误

{
  ok: 0,
  errmsg: 'not authorized on admin to execute command { insert: "users", documents: [[{_id ObjectIdHex("5d962346040f94390c75af87")} {email test@email.com} {password mypassword} {__v 0}]], ordered: true, writeConcern: { w: "majority" }, lsid: { id: {4 [103 212 165 139 101 156 64 219 134 229 99 101 244 58 241 13]} }, txnNumber: 1.000000, $clusterTime: { clusterTime: 6743616258408710147, signature: { hash: [182 133 122 147 115 29 40 38 207 106 105 195 60 131 107 121 63 161 82 165], keyId: 6718054837855977472.000000 } }, $db: "admin" }',
  code: 8000,
  codeName: 'AtlasError',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {}
}

一开始我以为这与MongoDB Atlas上的User Privileges有关,但是我已经尝试了其中的每一种。这是整个项目的样子,并预先感谢您:

index.js

require('./models/User');
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const authRoutes = require('./routes/authRoutes');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(authRoutes);

const mongoUri = 'mongodb+srv://myusername:mypassword@cluster0-ekepr.mongodb.net/admin?retryWrites=true&w=majority';



mongoose.connect(mongoUri, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true
});

mongoose.connection.on('connected', () => {
    console.log('Connected to mongo instance')
});

mongoose.connection.on('error', (err) => {
    console.error('Error connecting to mongo', err)
});

app.get('/', (req, res) => {
    res.send('Hi there!');
});

app.listen(3000, () => {
    console.log('Listening on port 3000');
});

/src/models/User.js

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    }
});

mongoose.model('User', userSchema);

/src/routes/authRoutes.js

const express = require('express');
const mongoose = require('mongoose');
const User = mongoose.model('User');


const router = express.Router();

router.post('/signup', async (req, res) => {
    // console.log(req.body);
    const { email, password } = req.body;

    try {
        const user = new User({ email, password });
        await user.save();
    } catch(err){
        console.error(err);
    }
    res.send('You made a post request');
});

module.exports = router;

这就是我的json请求的原始主体外观

{
    "email": "test@email.com",
    "password": "mypassword"
}

0 个答案:

没有答案