Giới thiệu
Trong bối cảnh công việc ngày càng đòi hỏi sự phối hợp và theo dõi tiến độ chặt chẽ, một ứng dụng quản lý dự án trở thành công cụ không thể thiếu. Với khả năng xử lý bất đồng bộ mạnh mẽ, Node.js kết hợp với MongoDB - một cơ sở dữ liệu NoSQL linh hoạt - tạo nên nền tảng lý tưởng để xây dựng một hệ thống quản lý dự án hoàn chỉnh. Bài viết này sẽ hướng dẫn từng bước tạo ra ứng dụng như vậy, từ thiết lập môi trường cho đến triển khai các tính năng cốt lõi.
Chuẩn bị môi trường phát triển
Để bắt đầu, cần cài đặt Node.js và MongoDB trên máy. Node.js có thể tải từ trang chủ, còn MongoDB có thể cài đặt thông qua trình quản lý gói hoặc chạy dưới dạng dịch vụ. Sau khi hoàn tất, khởi tạo một dự án Node.js mới bằng lệnh:
npm init -y
Tiếp theo, cài đặt các thư viện cần thiết:
npm install express mongoose body-parser cors
Trong đó, Express cung cấp framework web nhẹ nhàng, Mongoose hỗ trợ tương tác với MongoDB, body-parser xử lý dữ liệu JSON từ request, và cors cho phép ứng dụng frontend gọi API từ domain khác.
Thiết kế schema cho dự án
Với MongoDB, dữ liệu được lưu dưới dạng document trong các collection. Với ứng dụng quản lý dự án, có thể xác định ba schema chính: Project, Task và User.
const projectSchema = new mongoose.Schema({
name: { type: String, required: true },
description: String,
status: { type: String, default: 'active' },
createdAt: { type: Date, default: Date.now }
});
const taskSchema = new mongoose.Schema({
title: { type: String, required: true },
description: String,
project: { type: mongoose.Schema.Types.ObjectId, ref: 'Project' },
status: { type: String, default: 'pending' },
dueDate: Date
});
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true }
});
Các trường tham chiếu (ObjectId) giúp liên kết giữa project và task, đảm bảo tính toàn vẹn dữ liệu.
Xây dựng API backend
Khởi tạo server
Tạo file server.js để thiết lập server và kết nối MongoDB:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(bodyParser.json());
app.use(cors());
mongoose.connect('mongodb://localhost:27017/project-management', {
useNewUrlParser: true,
useUnifiedTopology: true
});
app.listen(3000, () => console.log('Server running on port 3000'));
Quảng cáo
300x250 In-Content Advertisement
API cho project
const Project = require('./models/Project');
app.post('/api/projects', async (req, res) => {
try {
const project = new Project(req.body);
await project.save();
res.status(201).json(project);
} catch (err) {
res.status(400).json({ error: err.message });
}
});
app.get('/api/projects', async (req, res) => {
try {
const projects = await Project.find();
res.json(projects);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
API cho task
const Task = require('./models/Task');
app.post('/api/tasks', async (req, res) => {
try {
const task = new Task(req.body);
await task.save();
res.status(201).json(task);
} catch (err) {
res.status(400).json({ error: err.message });
}
});
app.get('/api/tasks', async (req, res) => {
try {
const tasks = await Task.find().populate('project');
res.json(tasks);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
API cho user
const User = require('./models/User');
app.post('/api/users', async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.status(201).json(user);
} catch (err) {
res.status(400).json({ error: err.message });
}
});
app.get('/api/users', async (req, res) => {
try {
const users = await User.find();
res.json(users);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
Xây dựng giao diện frontend
Frontend có thể được xây dựng bằng HTML, CSS và vanilla JavaScript hoặc các framework như React, Vue. Dưới đây là ví dụ đơn giản với vanilla JS:
<!DOCTYPE html>
<html>
<head>
<title>Project Management</title>
</head>
<body>
<h1>Projects</h1>
<div id="projects"></div>
<script>
fetch('http://localhost:3000/api/projects')
.then(res => res.json())
.then(projects => {
const container = document.getElementById('projects');
projects.forEach(p => {
const div = document.createElement('div');
div.textContent = p.name;
container.appendChild(div);
});
});
</script>
</body>
</html>
Kết luận
Việc xây dựng ứng dụng quản lý dự án với Node.js và MongoDB không chỉ giúp hiểu rõ hơn về phát triển full-stack JavaScript, mà còn mang lại công cụ hữu ích cho công việc thực tế. Node.js với khả năng xử lý bất đồng bộ giúp API nhanh nhẹn, trong khi MongoDB với schema linh hoạt cho phép mở rộng tính năng dễ dàng. Từ đây, có thể nâng cấp thêm tính năng xác thực, phân quyền, hoặc tích hợp WebSocket để cập nhật thời gian thực, biến ứng dụng thành một hệ thống quản lý dự án hoàn chỉnh và chuyên nghiệp.