# How to parse Markdown in Next.js

> Learn how to parse Markdown in Next.js using marked, dompurify, and jsdom, running DOMPurify.sanitize() inside getStaticProps so it works server-side in Node.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2021-06-28 | Topics: [Next.js](https://flaviocopes.com/tags/next/) | Canonical: https://flaviocopes.com/nextjs-parse-markdown/

I had a field with markdown and I wanted to print it in a [Next.js](https://flaviocopes.com/nextjs/) page. 

I used [`marked`](https://github.com/markedjs/marked), [`dompurify`](https://github.com/cure53/DOMPurify) and [jsdom](https://github.com/jsdom/jsdom). Here's an example in a Next.js dynamic page, to render an item's description.

By the way, if your markdown documents are long, a table of contents helps. I made a [markdown TOC generator](https://flaviocopes.com/tools/markdown-toc/) that builds one from your headings.

Note that I had to call `DOMPurify.sanitize()` server-side, as it assumes we're in a [Node.js](https://flaviocopes.com/nodejs/) environment, so I put it into `getStaticProps()`:

```js
import { useState, useEffect } from 'react'
import Head from 'next/head'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { getJob, getJobs } from 'lib/data.js'
import prisma from 'lib/prisma'
import marked from 'marked'
import createDOMPurify from 'dompurify'
import { JSDOM } from 'jsdom'

export default function Item({ item }) {
  return <p>{item.description}</p>
}

export async function getStaticPaths() { //data fetching
  const items = await getItems(prisma)

  return {
    paths: items.map(job => ({
      params: {
        id: String(item.id),
      },
    })),
    fallback: false,
  }
}

export async function getStaticProps({ params }) {
  const id = String(params.id)
  const item = await getItem(prisma, id) //unrelated

  const window = new JSDOM('').window
  const DOMPurify = createDOMPurify(window)
  item.description = DOMPurify.sanitize(marked(item.description))

  return { props: { item } }
}

```
