声明

  1. import path from 'path';
  2. import matter from 'gray-matter';
  3. import fs, {promises as fsPromise} from 'fs';
  4. import marked from 'marked';
  5. const markdownDir = path.join(process.cwd(), 'markdown');
  6. export const getPosts = async () => {
  7. const fileNames = await fsPromise.readdir(markdownDir);
  8. const posts = fileNames.map(fileName => {
  9. const fullPath = path.join(markdownDir, fileName);
  10. const id = fileName.replace(/\.md$/g, '');
  11. const text = fs.readFileSync(fullPath, 'utf-8');
  12. // const {data, content} = matter(text)
  13. // const {title, date} = data
  14. const {data: {title, date}, content} = matter(text);
  15. return {
  16. id, title, date
  17. };
  18. });
  19. return posts;
  20. };
  21. export const getPost = async (id: string) => {
  22. const fullPath = path.join(markdownDir, id + '.md');
  23. const text = fs.readFileSync(fullPath, 'utf-8');
  24. const {data: {title, date}, content} = matter(text);
  25. const htmlContent = marked(content);
  26. return JSON.parse(JSON.stringify({
  27. id, title, date, content, htmlContent
  28. }));
  29. };
  30. export const getPostIds = async () => {
  31. const fileNames = await fsPromise.readdir(markdownDir);
  32. return fileNames.map(fileName => fileName.replace(/\.md$/g, ''));
  33. };

引用

  1. import {NextApiHandler} from 'next';
  2. import {getPosts} from 'lib/posts';
  3. const Posts: NextApiHandler = async (req, res) => {
  4. // 在这里引用
  5. const posts = await getPosts();
  6. res.statusCode = 200;
  7. res.setHeader('Content-Type', 'application/json');
  8. res.write(JSON.stringify(posts));
  9. res.end();
  10. };
  11. export default Posts;