Markdown rendern
Um Markdown-Inhalte zu rendern, verwenden wir die Bibliothek remark. Zuerst installieren wir sie:
npm install remark remark-htmlDann öffnen wir lib/posts.js und fügen folgende Imports am Anfang der Datei hinzu:
import { remark } from 'remark';
import html from 'remark-html';Aktualisieren Sie die Funktion getPostData() in derselben Datei wie folgt, um remark zu verwenden:
export async function getPostData(id) {
const fullPath = path.join(postsDirectory, `${id}.md`);
const fileContents = fs.readFileSync(fullPath, 'utf8');
// Verwenden Sie gray-matter, um den Metadaten-Abschnitt des Posts zu parsen
const matterResult = matter(fileContents);
// Verwenden Sie remark, um Markdown in einen HTML-String umzuwandeln
const processedContent = await remark()
.use(html)
.process(matterResult.content);
const contentHtml = processedContent.toString();
// Kombinieren Sie die Daten mit der ID und contentHtml
return {
id,
contentHtml,
...matterResult.data,
};
}Wichtig: Wir haben das Schlüsselwort
asynczugetPostDatahinzugefügt, weil wirawaitfürremarkbenötigen.async/awaitermöglicht es Ihnen, Daten asynchron abzurufen.
Das bedeutet, dass wir getStaticProps in pages/posts/[id].js aktualisieren müssen, um await beim Aufruf von getPostData zu verwenden:
export async function getStaticProps({ params }) {
// Fügen Sie das Schlüsselwort "await" wie folgt hinzu:
const postData = await getPostData(params.id);
return {
props: {
postData,
},
};
}Schließlich aktualisieren Sie die Post-Komponente in pages/posts/[id].js, um contentHtml mit dangerouslySetInnerHTML zu rendern:
export default function Post({ postData }) {
return (
<Layout>
{postData.title}
<br />
{postData.id}
<br />
{postData.date}
<br />
<div dangerouslySetInnerHTML={{ __html: postData.contentHtml }} />
</Layout>
);
}Versuchen Sie, diese Seiten erneut aufzurufen:
Sie sollten nun den Blog-Inhalt sehen:

Wir sind fast fertig! Lassen Sie uns als Nächstes jede Seite verfeinern.