Răsfoiți Sursa

fix: handle page metadata parse failure

NGPixel 3 ani în urmă
părinte
comite
dc5d8ddeb2
1 a modificat fișierele cu 28 adăugiri și 24 ștergeri
  1. 28 24
      server/models/pages.js

+ 28 - 24
server/models/pages.js

@@ -192,35 +192,39 @@ module.exports = class Page extends Model {
    */
   static parseMetadata (raw, contentType) {
     let result
-    switch (contentType) {
-      case 'markdown':
-        result = frontmatterRegex.markdown.exec(raw)
-        if (result[2]) {
-          return {
-            ...yaml.safeLoad(result[2]),
-            content: result[3]
-          }
-        } else {
-          // Attempt legacy v1 format
-          result = frontmatterRegex.legacy.exec(raw)
+    try {
+      switch (contentType) {
+        case 'markdown':
+          result = frontmatterRegex.markdown.exec(raw)
           if (result[2]) {
             return {
-              title: result[2],
-              description: result[4],
-              content: result[5]
+              ...yaml.safeLoad(result[2]),
+              content: result[3]
+            }
+          } else {
+            // Attempt legacy v1 format
+            result = frontmatterRegex.legacy.exec(raw)
+            if (result[2]) {
+              return {
+                title: result[2],
+                description: result[4],
+                content: result[5]
+              }
             }
           }
-        }
-        break
-      case 'html':
-        result = frontmatterRegex.html.exec(raw)
-        if (result[2]) {
-          return {
-            ...yaml.safeLoad(result[2]),
-            content: result[3]
+          break
+        case 'html':
+          result = frontmatterRegex.html.exec(raw)
+          if (result[2]) {
+            return {
+              ...yaml.safeLoad(result[2]),
+              content: result[3]
+            }
           }
-        }
-        break
+          break
+      }
+    } catch (err) {
+      WIKI.logger.warn('Failed to parse page metadata. Invalid syntax.')
     }
     return {
       content: raw