E11000 индекс ошибки дублированного ключа: mongo.users. $ Password_1 dup ключ: - PullRequest
0 голосов
/ 11 сентября 2018

У меня была эта ошибка, хотя у меня редкий индекс, установленный на true для этого пароля, вот схема пользователя:

var roledef = 'Member';
var mongoose = require('mongoose');
var UserSchema = new mongoose.Schema({
    username: {
        type: String,
        required: true,
        unique: true,
        sparse: true,
        minlength: [5, 'Username must be grater than 5 characters']
    },
    password: {
        type: String,
        required: true,
        sparse: true,
        minlength: [5, 'Username must be grater than 5 characters']
    },
    email: {
        type: String,
        required: true
    },
    profileid: {
        type: String,
        required: true,
    },
    roles: {
        type: String,
        default: roledef,
        sparse: true
    }
});
const User = mongoose.model('User', UserSchema);
module.exports = User;
// write encryption

, и я маршрутизирую через файл индекса, который работает, но я не знаю, если этоэто лучший способ создать пользователя, вот мой файл контроллера пользователя:

const userModel = require('../../models');
const UserController = {};
const User = require('../../models/User')
const sha256 = require('sha256');
module.exports.validateregistration =  (req, res) => {
        console.log("##########################################################".red);
        var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress
    if (req.body.encodedUsername && req.body.encodedPassword && req.body.encodedEmail) {
        // res.send(result);
        log(ip);

        var buffU = new Buffer(req.body.encodedUsername, 'base64');
        var buffP = new Buffer(req.body.encodedPassword, 'base64');
        var buffE = new Buffer(req.body.encodedEmail, 'base64');
        var Username = buffU.toString('ascii');
        var Pass = buffP.toString('ascii');
        var Email = buffE.toString('ascii');
        var hashPass = sha256.x2(Pass);
        console.log("Register request for " + "Username: " + Username);
        const userData = { 
            username: Username,
            password: hashPass, 
            email: Email,
            profileid: sha256(buffU)
        };
        const user = new userModel.User({
            username: Username,
            password: hashPass, 
            email: Email,
            profileid: sha256(buffU)
        });
        const details = userData;
        user.save().then((newuser) => {
            res.status(200).json({
                success: true,
                data: newuser
            });
        }).catch((err) => {
            res.status(500).json({
                message: err
            });
            console.log(err);
        });
        // User.findOne({ username: userData.username, email: userData.email }, (err, resultofcheck) => {
        //     console.log(resultofcheck)
        //     if (resultofcheck == null) {
        //         User.create(userData, function (err, user) {
        //             if (err) {
        //                 console.log(err);
        //                 res.send("2")
        //             } else {
        //                 console.log(user);
        //                 console.log("New user created: " + user.username + " Profile id:  " + user.profileid);
        //                 res.redirect("/api/profile/" + user.profileid);
        //             } 
        //         });
        //         } else {
        //         console.log(Username + " is taken")
        //         console.log(err);
        //         res.send("2");
        //     };
        // });
    }

        console.log("##########################################################".red);
};
// if (!result) {
        //     db.collection('users').insert(details, (err, resultofinsert) => {
        //         if (err) {
        //             console.log(err);
        //             res.sendStatus(500);
        //         } else {
        //             res.send(user.profileid);
        //             console.log("New user created: " + user);
        //         }
        //     });
        // };
        // db.collection('users').insert(user, (err, result) => {
        //     if (err) {
        //         res.sendStatus(501);
        //         res.send({ 'error': 'An error has occured!' });
        //     } else {
        //         // res.send(result.ops[0].pass);
        //         console.log(result);
        //     };
        // });

я вызываю через другой индексный файл, но iworks также, но я получаю эту ошибку:

{MongoError: E11000 индекс ошибки повторяющегося ключа: mongo.users. $ Password_1 dup ключ: {: "e701ea082879498082d025e0cf9857ec0d19e6e86fa39f92ed3286de55d340e6"} в Function.create (C: \ Users \ abinash \ Desktop \ api \ lib: m: -dj: error_mo.jpg43:12) в toError (C: \ Users \ abinash \ Desktop \ api \ node_modules \ mongoose \ node_modules \ mongodb \ lib \ utils.js: 149: 22) в coll.s.topology.insert (C: \ Users \abinash \ Desktop \ api \ node_modules \ mongoose \ node_modules \ mongodb \ lib \ operations \ collection_ops.js: 828: 39) в C: \ Users \ abinash \ Desktop \ api \ node_modules \ mongodb-core \ lib \ connection \ pool.js: 532: 18 в _combinedTickCallback (внутренний/process/next_tick.js:131:7) at process._tickCallback (internal / process / next_tick.js: 180: 9) драйвер: true, имя: 'MongoError', индекс: 0, код: 11000,
errmsg: 'E11000 дубликат ключа индекса ошибки: mongo.users $ password_1 DUP ключ:. {: "e701ea082879498082d025e0cf9857ec0d19e6e86fa39f92ed3286de55d340e6"}, [Символ (mongoErrorContextSymbol)]: {}}

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

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