react-personal-website/server/routes/posts.js

45 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

2025-02-28 11:41:05 -05:00
const express = require('express');
const router = express.Router();
const { getAllPosts, getPostBySlug } = require('../utils/markdownParser');
// Get all posts
router.get('/', async (req, res) => {
try {
const includeDrafts = req.query.includeDrafts === 'true';
const posts = await getAllPosts(includeDrafts);
// Return only necessary data for listing
const postsListing = posts.map(({ title, description, date, tags, slug, excerpt }) => ({
title,
description,
date,
tags,
slug,
excerpt
}));
res.json(postsListing);
} catch (error) {
console.error('Error fetching posts:', error);
res.status(500).json({ error: 'Failed to fetch posts' });
}
});
// Get post by slug
router.get('/:slug', async (req, res) => {
try {
const post = await getPostBySlug(req.params.slug);
if (post.draft && process.env.NODE_ENV === 'production') {
return res.status(404).json({ error: 'Post not found' });
}
res.json(post);
} catch (error) {
console.error(`Error fetching post ${req.params.slug}:`, error);
res.status(404).json({ error: 'Post not found' });
}
});
module.exports = router;