yusuketk 5 лет назад
Родитель
Сommit
f5ea1dd019
2 измененных файлов с 24 добавлено и 14 удалено
  1. 21 11
      src/server/routes/apiv3/page.js
  2. 3 3
      src/server/service/export.js

+ 21 - 11
src/server/routes/apiv3/page.js

@@ -199,10 +199,11 @@ module.exports = (crowi) => {
   *            description: Return page's markdown
   */
   router.get('/export/:pageId', validator.export, async(req, res) => {
-    try {
-      const { pageId } = req.params;
-      const { format, revisionId = null } = req.query;
+    const { pageId } = req.params;
+    const { format, revisionId = null } = req.query;
+    let revision;
 
+    try {
       const Page = crowi.model('Page');
       const page = await Page.findByIdAndViewer(pageId, req.user);
 
@@ -218,20 +219,29 @@ module.exports = (crowi) => {
       const revisionIdForFind = revisionId || page.revision;
 
       const Revision = crowi.model('Revision');
-      const revision = await Revision.findById(revisionIdForFind);
+      revision = await Revision.findById(revisionIdForFind);
+    }
+    catch (err) {
+      logger.error('Failed to get page data', err);
+      return res.apiv3Err(err, 500);
+    }
 
-      const fileName = revisionIdForFind;
-      const stream = exportService.getReadStreamFromRevision(revision);
+    const fileName = revision.id;
+    let stream;
 
-      res.set({
-        'Content-Disposition': `attachment;filename*=UTF-8''${fileName}.${format}`,
-      });
-      return stream.pipe(res);
+    try {
+      stream = exportService.getReadStreamFromRevision(revision, format);
     }
     catch (err) {
-      logger.error('Failed to get markdown', err);
+      logger.error('Failed to create readStream', err);
       return res.apiv3Err(err, 500);
     }
+
+    res.set({
+      'Content-Disposition': `attachment;filename*=UTF-8''${fileName}.${format}`,
+    });
+
+    return stream.pipe(res);
   });
 
   return router;

+ 3 - 3
src/server/service/export.js

@@ -350,13 +350,13 @@ class ExportService {
     return zipFile;
   }
 
-  getReadStreamFromRevision(revision) {
-    const markdown = revision.body;
+  getReadStreamFromRevision(revision, format) {
+    const data = revision.body;
 
     const Readable = require('stream').Readable;
     const readable = new Readable();
     readable._read = () => {};
-    readable.push(markdown);
+    readable.push(data);
     readable.push(null);
 
     return readable;