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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.