我正在开发一个卑鄙的应用程序.

这是我的用户名模式,用户名应该是唯一的.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

module.exports = mongoose.model('User', new Schema({ 
    username: { type: String, unique: true }
}));

在我的发帖路由上,我这样保存用户:

app.post('/authenticate', function(req, res) {
        var user = new User({
            username: req.body.username
        });

        user.save(function(err) {
            if (err) throw err;

            res.json({
                success: true
            });

        });
    })

如果我再次使用相同的用户名发帖,会出现以下错误:

MongoError:insertDocument::原因::11000 E11000重复密钥

有人能解释一下如何发送json(比如{ succes: false, message: 'User already exist!' })而不是错误吗

注意:在我发布用户后,我会自动认证,不需要密码或其他东西.

推荐答案

您需要测试save方法返回的错误,以查看是否为重复的用户名抛出了该错误.

app.post('/authenticate', function(req, res) {
  var user = new User({
    username: req.body.username
  });

  user.save(function(err) {
    if (err) {
      if (err.name === 'MongoError' && err.code === 11000) {
        // Duplicate username
        return res.status(422).send({ succes: false, message: 'User already exist!' });
      }

      // Some other error
      return res.status(422).send(err);
    }

    res.json({
      success: true
    });

  });
})

Mongodb相关问答推荐

Mongoose 排除数组中包含特定嵌套对象的文档

Mongo,通过 Lookup 计算多个文档中数组中的项目

MongoDB - 在 $lookup 管道中匹配键匹配不起作用

MongoDB 查询以包含多个字段的最常见值的计数

System.FormatException occurred in MongoDB.Bson.dll - XXX is not a valid 24 digit hex string

mongoDB vs mySQL - 为什么在某些方面比另一个更好

实现 twitter 和 facebook 之类的主题标签

使用 homebrew 和 Xcode 8.1.1 安装 Mongodb 失败

MongoDB 更改流副本集限制

Meteor 中的平均聚合查询

返回从循环中调用的数据库查询中检索到的数据的问题

pymongo 排序和 find_one 问题

具有多个字段的mongodb文本搜索

为什么 PyMongo 会抛出 AutoReconnect?

MongoDb:如何将附加对象插入对象集合?

NumberLong和简单整数之间的MongoDB区别?

如何在 MongoDB Map-reduce 映射函数中使用变量

将 MongoCursor from ->find() 转换为数组

mongoose 使用 $cond 中的 $exists 聚合

Mongoose:Model.create 和 Collection.insert 有什么区别