mirror of
https://github.com/vercel/next-learn.git
synced 2026-06-25 13:46:10 +00:00
Add example
This commit is contained in:
69
example/lib/posts.js
Normal file
69
example/lib/posts.js
Normal file
@@ -0,0 +1,69 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import matter from 'gray-matter'
|
||||
import remark from 'remark'
|
||||
import html from 'remark-html'
|
||||
|
||||
const postsDirectory = path.join(process.cwd(), 'posts')
|
||||
|
||||
export function getSortedPostsData() {
|
||||
// Get file names under /posts
|
||||
const fileNames = fs.readdirSync(postsDirectory)
|
||||
const allPostsData = fileNames.map(fileName => {
|
||||
// Remove ".md" from file name to get id
|
||||
const id = fileName.replace(/\.md$/, '')
|
||||
|
||||
// Read markdown file as string
|
||||
const fullPath = path.join(postsDirectory, fileName)
|
||||
const fileContents = fs.readFileSync(fullPath, 'utf8')
|
||||
|
||||
// Use gray-matter to parse the post metadata section
|
||||
const { data } = matter(fileContents)
|
||||
|
||||
// Combine the data with the id
|
||||
return {
|
||||
id,
|
||||
...data
|
||||
}
|
||||
})
|
||||
// Sort posts by date
|
||||
return allPostsData.sort((a, b) => {
|
||||
if (a.date < b.date) {
|
||||
return 1
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function getAllPostIds() {
|
||||
const fileNames = fs.readdirSync(postsDirectory)
|
||||
return fileNames.map(fileName => {
|
||||
return {
|
||||
params: {
|
||||
id: fileName.replace(/\.md$/, '')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function getPostData(id) {
|
||||
const fullPath = path.join(postsDirectory, `${id}.md`)
|
||||
const fileContents = fs.readFileSync(fullPath, 'utf8')
|
||||
|
||||
// Use gray-matter to parse the post metadata section
|
||||
const { data, content } = matter(fileContents)
|
||||
|
||||
// Use remark to convert markdown into HTML string
|
||||
const processedContent = await remark()
|
||||
.use(html)
|
||||
.process(content)
|
||||
const contentHtml = processedContent.toString()
|
||||
|
||||
// Combine the data with the id and contentHtml
|
||||
return {
|
||||
id,
|
||||
contentHtml,
|
||||
...data
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user