Софтуерно Инженерство
Loading...
+ Нов въпрос
dimo.ivanov avatar dimo.ivanov 35 Точки

[Blog: JS and Mongo DB] Как поле от базата може да се ъпдейтне с функция?

Здравейте, 

 

Подобно на PHP блога съм добавил 'summary' property към articles, което се генерира така:

article.summary = article.content.length > 500 ?
    article.content.substr(0, 450) + "..." : article.content;

 

Идеята е в хоум пейджа да се визуализира 'summary' вместо 'content', за да изглежда по-читаво.

Въпросът ми е как може да се генерира такова summary върху вече създадените articles в базата данни?

 

Тагове:
Silvave avatar Silvave 127 Точки

Здрасти,

Когато достъпваш данните от базата от някой контролер (homeController) и преди да ги подадеш на view-то (homeView) може да си направиш това summary по един от следните начини - когато получиш всички articles, като закачиш на всеки article обект и summary пропърти, примерно: 

 Article.find().then((articles) => {
   articles = articles.map(a => {
       a.summary = a.content.length > 500 ? a.content.substr(0, 450) + "..." : article.content
       return a
     })

   res.render('home/index', articles)
}

или без тернарен оператор ще е този начин

 Article.find().then((articles) => {
   articles = articles.map(a => {
     if (a.content.length > 500} {
       a.summary = a.content.substr(0, 450) + "..."
     } else {
       a.summary = article.content
     }
     return a
   }

   res.render('home/index', articles)
}

и накрая го подаваш на някое view, както е показано с res.render()

1
dimo.ivanov avatar dimo.ivanov 35 Точки

Тоест когато се изрендва веднъж това view и мине през всички articles с тази функция, всяко article вече ще има генерирано summary в базата? Тогава вече функцията за генериране на summary може да се измести в createPost в Article Controller, за да не се вика при всяко рендване на view-то, а само при създаване на нов article.

Супер! Ще пробвам, мерси!

0
Silvave avatar Silvave 127 Точки

Да, може и да си създаваш summary-то предварително и да си го пазиш в базата или да го създаваш, само ако е нужно преди да извикваш view-то, защото както е написано така ще пазиш в базата два пъти съдържанието на article.content, което не е много практично при реално приложение.

0
dimo.ivanov avatar dimo.ivanov 35 Точки

Ами при php идеята беше да не се изпълнява тази операция всеки път за всяка статия, а във всяка да има записана стойност за summary и тя да се извиква в хоум вюто. А целия content се вика от ditails view-то, закачено за 'Read more' бутона.

Та всъщност не съм много сигурен дали това е достатъчно да се запишат summer-ита на вече съществуващи статии в базата. Ще тествам.

1