Mongoose Unique Validatorを使用してMongoDBの重複エラーを処理する方法


以下に、Mongoose Unique Validatorを使って重複エラーを処理するシンプルで簡単な方法とコード例を示します。

  1. Mongoose Unique Validatorのインストール: まず、Mongoose Unique Validatorパッケージをインストールします。以下のコマンドを使用します。
npm install mongoose-unique-validator
  1. モデルにUnique Validatorを追加: Mongooseのスキーマ定義にUnique Validatorを追加します。以下は、例としてUserモデルのスキーマ定義です。
const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');
const userSchema = new mongoose.Schema({
  username: {
    type: String,
    unique: true, // ユニークなフィールドであることを指定
    required: true
  },
  email: {
    type: String,
    unique: true, // ユニークなフィールドであることを指定
    required: true
  },
  password: {
    type: String,
    required: true
  }
});
userSchema.plugin(uniqueValidator); // Unique Validatorをプラグインとして追加
const User = mongoose.model('User', userSchema);
module.exports = User;
  1. 重複エラーのハンドリング: Mongoose Unique Validatorを使用すると、重複エラーが発生した場合にエラーメッセージをカスタマイズすることができます。以下は、エラーメッセージのカスタマイズ例です。
User.create({ username: 'john', email: '[email protected]', password: 'password' }, function(err, user) {
  if (err) {
    if (err.name === 'MongoError' && err.code === 11000) { // 重複エラーの場合
      if (err.keyPattern.username) {
        console.log('ユーザー名が既に使用されています');
      } else if (err.keyPattern.email) {
        console.log('メールアドレスが既に使用されています');
      } else {
        console.log('重複エラーが発生しました');
      }
    } else {
      console.log('エラーが発生しました');
    }
  } else {
    console.log('ユーザーが正常に作成されました');
  }
});

上記の例では、User.create()メソッドを使用して新しいユーザーを作成しています。もし重複エラーが発生した場合、エラーオブジェクトのnamecodeプロパティをチェックして、重複したフィールド(ここではusernameemail)に応じてカスタマイズされたエラーメッセージを表示しています。

以上が、Mongoose Unique Validatorを使用してMongoDBの重複エラーを処理する方法の概要です。これにより、一意の制約を持つフィールドで重複エラーが発生した場合に、適切なエラーメッセージを表示することができます。