【问题标题】:getting mongoose save error null while enter duplicate data on mongodb在mongodb上输入重复数据时得到mongoose保存错误null
【发布时间】:2018-06-22 18:22:58
【问题描述】:

嗨,请帮我解决我有 userSchema 的代码,并且用户名和密码是唯一的。当我在 MongoDB 上输入重复数据时,数据保存成功。当我将重复数据放入 MongoDB 时,我想得到错误。

//UserSchema

var userSchema =mongoose.Schema({
    user:{type:String,require:true,unique:true},
    pass:{type:String,require:true,unique:true}
})


router.post('/users',function(req,res){    
    var newUser = new Item.user({
        user:req.body.username,
        pass:req.body.password
    });        
    if(req.body.username ==null || req.body.username=='' || req.body.password ==null || req.body.password=='' ){            
        res.json({success : false, message : 'Ensure username ,email and password provided'});
    }else{
        newUser.save(function(err){
            console.log('save errror ',err);
            if(err){                     
                res.json({success : false , message :'user already exist' });
            }
            else{                    
                res.json({success :true , message : 'successfully saved'});
            }
        });

    }    
});

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    这是执行您想要的代码的最小工作示例。 请看一下错误是如何处理的。因此可以将重复键错误与任何其他错误分开。

    我曾经使用expressbody-parsermongoose 来使其工作。还稍微重构了您的代码。希望这会有所帮助。

    const express = require('express');
    const mongoose = require('mongoose');
    const bodyParser = require('body-parser');
    
    mongoose.connect('mongodb://localhost/my_database');
    
    const UserSchema = mongoose.Schema({
        user: {type: String, require: true, unique: true},
        pass: {type: String, require: true, unique: true}
    });
    
    const User = mongoose.model('User', UserSchema);
    
    const app = express();
    app.use(bodyParser.json());
    
    app.post('/users', function (req, res) {
        if (!req.body.username || !req.body.password) {
            res.json({success: false, message: 'Ensure username, email and password provided'});
            return;
        }
    
        const newUser = new User({
            user: req.body.username,
            pass: req.body.password
        });
    
        newUser.save(function (err) {
            if (err) {
                console.log('save errror ', err);
    
                if (err.name === 'MongoError' && err.code === 11000) {
                    // Duplicate error happened. You can handle it separately.
                    res.json({success: false, message: 'user already exist'});
                    return;
                }
    
                // Some other error happened, you might also want to handle it.
                res.json({success: false, message: 'some error happened'});
                return;
            }
    
            res.json({success: true, message: 'successfully saved'});
        });
    });
    
    app.listen(8888);

    【讨论】:

    • 但我得到 err 为 null 那么如何检查条件 console.log('save error ',err);
    • 如果 err 为 null 表示 .save() 执行成功。在这种情况下 res.json({success: true ...) 将被调用。查看 if (err) 语句和 return 语句。 @MohammadFaisal
    • yes .save() 已成功执行,但重复数据存储在数据库中,我不想将重复数据存储在数据库中
    • 如果您传递的是唯一的用户名和密码 - 它们将保存到数据库中。如果您尝试保存重复的 - 它会抛出带有代码 1100 的 MongoError 并且不会保存它。我刚测试过。 @MohammadFaisal
    • 尝试删除数据库并再次测试。也许索引没有以某种方式创建@MohammadFaisal
    猜你喜欢
    • 2015-06-11
    • 2017-07-27
    • 2012-10-09
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多