33
章节33
渲染 Markdown
为了渲染 Markdown 内容,我们将使用 remark 库。首先,让我们安装它
npm install remark remark-html然后,打开 lib/posts.js 并在文件顶部添加以下导入
import { remark } from 'remark';
import html from 'remark-html';并在同一文件中更新 getPostData() 函数,如下所示,以使用 remark
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 matterResult = matter(fileContents);
// Use remark to convert markdown into HTML string
const processedContent = await remark()
.use(html)
.process(matterResult.content);
const contentHtml = processedContent.toString();
// Combine the data with the id and contentHtml
return {
id,
contentHtml,
...matterResult.data,
};
}重要:我们给
getPostData添加了async关键字,因为我们需要为remark使用await。async/await允许你异步获取数据。
这意味着我们需要更新 pages/posts/[id].js 中的getStaticProps,以便在调用 getPostData 时使用 await
export async function getStaticProps({ params }) {
// Add the "await" keyword like this:
const postData = await getPostData(params.id);
return {
props: {
postData,
},
};
}最后,更新 pages/posts/[id].js 中的 Post 组件,以使用dangerouslySetInnerHTML来渲染 contentHtml
export default function Post({ postData }) {
return (
<Layout>
{postData.title}
<br />
{postData.id}
<br />
{postData.date}
<br />
<div dangerouslySetInnerHTML={{ __html: postData.contentHtml }} />
</Layout>
);
}再次尝试访问这些页面
现在你应该能看到博客内容了

我们快完成了!接下来,让我们美化每个页面。
这有帮助吗?