Gray Matter ve Tarih Problemi


yazıldı

bir dakikadan az okuma süresi

Next.js blogumda rahatça CMS kullanmamı engelleyen bir durum vardı. Tarihleri tırnak içerisine almazsam aşağıdaki gibi bir hata alıyordum.

Reason: object ("[object Date]") cannot be serialized as JSON. Please only return JSON serializable data types.

Denediğim tüm CMSler de tarihi tırnaksız olarak kaydediyorlardı ve çoğunda (denediğim hepsinde) bunu değiştirme şansım yoktu.

Görünüşe göre Next.js getServerSideProps , getInitialProps ve getStaticProps içerisinde String dışında bir şey kullanmamıza izin vermiyor. Bunu öğrenince tarihi ayrı bir değişkende .toIsoString ile Stringe dönüştürmeyi denedim fakat gray-matter tüm frontmatter'ı işlerken tarihi de işlediği için çözüm olmadı. Sonuç olarak sorunu gray-matter içerisinde çözmem gerekiyordu.

Çözüm olarak gray-matter kütüphanesinin JSON şemasını kullanmasını söylememiz gerekiyor YAML için.

En iyi yöntem kodla anlatmak olduğuna göre matter(içerik) olarak kullanmak yerine aşağıdaki gibi kullanmak gerekiyor:

import matter from "gray-matter";
import yaml from "js-yaml";
 
matter(içerik, {
      engines: {
        yaml: (s) => yaml.load(s, { schema: yaml.JSON_SCHEMA }),
      },
    });

Nihayet artık tarih kısmına dikkat etmeme gerek kalmadı.