نسخ
// app.js
const express = require('express');
const app = express();
// Middleware
app.use(express.json());
// استيراد Routers
const authRoutes = require('./routes/auth');
const postRoutes = require('./routes/posts');
const commentRoutes = require('./routes/comments');
const userRoutes = require('./routes/users');
// استخدام Routers
app.use('/api/auth', authRoutes);
app.use('/api/posts', postRoutes);
app.use('/api/comments', commentRoutes);
app.use('/api/users', userRoutes);
// Route للصفحة الرئيسية
app.get('/', (req, res) => {
res.json({
message: 'مرحباً بك في API المدونة',
endpoints: {
auth: '/api/auth',
posts: '/api/posts',
comments: '/api/comments',
users: '/api/users'
}
});
});
// معالجة 404
app.use((req, res) => {
res.status(404).json({
success: false,
error: 'المسار غير موجود'
});
});
app.listen(3000, () => {
console.log('API المدونة يعمل على المنفذ 3000');
});
نسخ
// routes/posts.js
const express = require('express');
const router = express.Router();
// قاعدة بيانات مؤقتة
let posts = [
{
id: 1,
title: 'مقدمة في Node.js',
content: 'Node.js منصة قوية...',
author: 'أحمد',
createdAt: new Date()
}
];
// جلب جميع المقالات
router.get('/', (req, res) => {
// دعم الفلترة والبحث
const { search, author } = req.query;
let filteredPosts = posts;
if (search) {
filteredPosts = filteredPosts.filter(p =>
p.title.includes(search) || p.content.includes(search)
);
}
if (author) {
filteredPosts = filteredPosts.filter(p => p.author === author);
}
res.json({
success: true,
count: filteredPosts.length,
data: filteredPosts
});
});
// جلب مقال معين
router.get('/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) {
return res.status(404).json({
success: false,
error: 'المقال غير موجود'
});
}
res.json({
success: true,
data: post
});
});
// إنشاء مقال جديد
router.post('/', (req, res) => {
const { title, content, author } = req.body;
// التحقق من البيانات
if (!title || !content || !author) {
return res.status(400).json({
success: false,
error: 'يرجى إدخال جميع الحقول المطلوبة'
});
}
const newPost = {
id: posts.length + 1,
title,
content,
author,
createdAt: new Date()
};
posts.push(newPost);
res.status(201).json({
success: true,
data: newPost
});
});
// تحديث مقال
router.put('/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) {
return res.status(404).json({
success: false,
error: 'المقال غير موجود'
});
}
post.title = req.body.title || post.title;
post.content = req.body.content || post.content;
post.updatedAt = new Date();
res.json({
success: true,
data: post
});
});
// حذف مقال
router.delete('/:id', (req, res) => {
const index = posts.findIndex(p => p.id === parseInt(req.params.id));
if (index === -1) {
return res.status(404).json({
success: false,
error: 'المقال غير موجود'
});
}
posts.splice(index, 1);
res.json({
success: true,
message: 'تم حذف المقال بنجاح'
});
});
module.exports = router;