Node.jsとMongoDBを使用したユーザー管理システムの作成は、非常に多くのアプリケーションで重要な要素です。特に、Node.jsはサーバーサイドでの非同期処理を得意としており、MongoDBはNoSQLデータベースとして、スケーラビリティと柔軟性を提供します。この記事では、MongoDBとそのMongooseライブラリを使用して、Node.jsアプリケーションでユーザー管理システムをどのように実装するかについて、完全かつ包括的に説明します。
1. Node.jsのセットアップ
まず、Node.jsがインストールされていることを確認してください。Node.jsをインストールしていない場合は、公式サイトからインストールできます。

次に、プロジェクトのディレクトリを作成し、npm init
を使って新しいNode.jsプロジェクトを初期化します。
bashmkdir user-management-app
cd user-management-app
npm init -y
これで、package.json
ファイルが作成され、プロジェクトが初期化されました。
2. 必要なパッケージのインストール
ユーザー管理を行うために、次のパッケージをインストールします。
- Express: 軽量なWebフレームワーク
- Mongoose: MongoDBとのインタラクションを簡素化するORM(Object-Relational Mapping)
- bcryptjs: パスワードのハッシュ化
- jsonwebtoken: JWT(JSON Web Token)を使用して認証を行う
これらのパッケージをインストールするために、次のコマンドを実行します。
bashnpm install express mongoose bcryptjs jsonwebtoken
3. MongoDBのセットアップ
MongoDBをローカルにインストールしていない場合は、MongoDBの公式サイトからインストールしてください。また、MongoDB Atlasを使用してクラウド上でデータベースをセットアップすることもできます。
MongoDBがインストールされ、データベースがセットアップされていることを確認してください。次に、mongoose
ライブラリを使用してNode.jsアプリケーションに接続します。
4. Mongooseモデルの作成
ユーザー情報を格納するためのMongooseモデルを作成します。models/User.js
というファイルを作成し、次のコードを記述します。
javascriptconst mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
// ユーザースキーマ
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
});
// パスワードのハッシュ化
userSchema.pre('save', async function (next) {
if (!this.isModified('password')) return next();
const salt = await bcrypt.genSalt(10);
this.password = await bcrypt.hash(this.password, salt);
next();
});
// パスワードを比較するメソッド
userSchema.methods.matchPassword = async function (enteredPassword) {
return await bcrypt.compare(enteredPassword, this.password);
};
const User = mongoose.model('User', userSchema);
module.exports = User;
このコードでは、User
モデルを定義し、name
、email
、password
、createdAt
のフィールドを持つユーザーを作成します。また、パスワードは保存前にハッシュ化され、matchPassword
メソッドを使用してユーザーが入力したパスワードが正しいかどうかを確認します。
5. Expressサーバーの設定
次に、server.js
というファイルを作成し、基本的なExpressサーバーを設定します。
javascriptconst express = require('express');
const mongoose = require('mongoose');
const User = require('./models/User');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const dotenv = require('dotenv');
// 環境変数を読み込む
dotenv.config();
// サーバーのセットアップ
const app = express();
app.use(express.json());
// MongoDBの接続
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => console.log('MongoDB Connected'))
.catch(err => console.log(err));
// 新規ユーザー登録エンドポイント
app.post('/api/users/register', async (req, res) => {
const { name, email, password } = req.body;
try {
let user = await User.findOne({ email });
if (user) {
return res.status(400).json({ message: 'ユーザーはすでに存在します' });
}
user = new User({
name,
email,
password,
});
await user.save();
res.status(201).json({ message: 'ユーザーが作成されました' });
} catch (error) {
res.status(500).json({ message: 'サーバーエラー' });
}
});
// ログインエンドポイント
app.post('/api/users/login', async (req, res) => {
const { email, password } = req.body;
try {
let user = await User.findOne({ email });
if (!user) {
return res.status(400).json({ message: 'ユーザーが見つかりません' });
}
const isMatch = await user.matchPassword(password);
if (!isMatch) {
return res.status(400).json({ message: 'パスワードが間違っています' });
}
const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' });
res.json({ token });
} catch (error) {
res.status(500).json({ message: 'サーバーエラー' });
}
});
// サーバーを起動
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
6. .envファイルの設定
次に、データベース接続情報やJWTの秘密鍵を管理するために、プロジェクトのルートディレクトリに.env
ファイルを作成し、以下の内容を記述します。
envMONGO_URI=mongodb://localhost:27017/userdb JWT_SECRET=your_jwt_secret_key
これにより、MongoDBの接続とJWTのシークレットを環境変数として管理できます。
7. アプリケーションのテスト
アプリケーションをテストするためには、PostmanやInsomniaなどのAPIテストツールを使用して、次のエンドポイントにリクエストを送信します。
- POST /api/users/register: 新しいユーザーを登録するためのエンドポイント。
- POST /api/users/login: ユーザーがログインしてJWTトークンを取得するためのエンドポイント。
結論
この記事では、Node.js、MongoDB、Mongooseを使用して、ユーザー管理システムをどのように作成するかを示しました。このシステムには、ユーザーの登録、ログイン、JWTによる認証機能が含まれています。これを基に、さらに多くの機能(パスワードリセット、ユーザー更新など)を追加することができます。
このようなユーザー管理システムは、セキュリティ面でも強化が可能であり、スケーラブルで効率的な方法でユーザー管理を行うことができます。