hakumizuki 4 лет назад
Родитель
Сommit
88dcddd531
2 измененных файлов с 12 добавлено и 7 удалено
  1. 0 7
      src/server/models/page.js
  2. 12 0
      src/server/routes/apiv3/pages.js

+ 0 - 7
src/server/models/page.js

@@ -768,13 +768,6 @@ module.exports = function(crowi) {
     builder.addConditionToPagenate(opt.offset, opt.limit, sortOpt);
     builder.populateDataToList(User.USER_FIELDS_EXCEPT_CONFIDENTIAL);
     const pages = await builder.query.lean().exec('find');
-    const PageTagRelation = mongoose.model('PageTagRelation');
-    await Promise.all(pages.map(async(page) => {
-      const relations = await PageTagRelation.find({ relatedPage: page._id }).populate('relatedTag');
-      page.tags = relations.map((relation) => {
-        return relation.relatedTag;
-      });
-    }));
 
     const result = {
       pages, totalCount, offset: opt.offset, limit: opt.limit,

+ 12 - 0
src/server/routes/apiv3/pages.js

@@ -3,6 +3,7 @@ const loggerFactory = require('@alias/logger');
 const logger = loggerFactory('growi:routes:apiv3:pages'); // eslint-disable-line no-unused-vars
 const express = require('express');
 const pathUtils = require('growi-commons').pathUtils;
+const mongoose = require('mongoose');
 
 const { body } = require('express-validator');
 const { query } = require('express-validator');
@@ -308,6 +309,17 @@ module.exports = (crowi) => {
         }
       });
 
+      const PageTagRelation = mongoose.model('PageTagRelation');
+      const ids = result.pages.map((page) => { return page._id });
+      const relations = await PageTagRelation.find({ relatedPage: { $in: ids } }).populate('relatedTag');
+      result.pages.forEach((page) => {
+        page.tags = [];
+        relations.forEach((relation) => {
+          if (relation.relatedPage.toString() === page._id.toString()) {
+            page.tags.push(relation.relatedTag);
+          }
+        });
+      });
       return res.apiv3(result);
     }
     catch (err) {