строка подстроки в nodejs и pug - PullRequest
0 голосов
/ 11 октября 2019

У меня есть файл поискового мопса с этим содержимым

extends layout.pug

block css
  link(rel="stylesheet", href="/css/article_search.css")

block content  
    h1 Search Results
    .displaying-results
      if noresults
      else
        span= "Results for " + searchValue

    .search-results   
      div
        each article, i in articles
          if i%3==0
            // TODO: 
              // add ads
          .search-result
            img.result-image(src=article.image1)
            .summary
              .result-link
                h3: a.article-link(href="/article/"+article._id, title=article.title)= "A: "+article.title
              .result-discription= articlelimit
              if article.tag
                .result-tag
                  a.article-tag(href=article.category) abcde
              .result-posted
                b.posted posted &nbsp 
                span(title=article.date)= article.date
                |  by 
                span= article.author
              .clear



    if noresults
      .noresults
        .noresults-value.
          We couldn't find anything for <b>#{searchValue}</b>
        .noresults-hint.
          Try different or less specific keywords.
      .ads    

, и я хочу, чтобы перед рендерингом файла клиенту я хотел подстроку article.body

// Search News
app.get('/article/search', function(req, res) {
  if (req.query.search) {
    const regex = new RegExp(escapeRegex(req.query.search), 'gi');

    Article.find({title: regex}, function (err, allArticles) {
      if (err) {
        console.log(err);
      }else if (allArticles === undefined || allArticles.length == 0) {
        console.log(allArticles);
        res.render("article_search", {articles:allArticles, searchValue: req.query.search, noresults:true, totalResults:0});
      }else {
        console.log(allArticles.length);
        res.render("article_search", {articles:allArticles, articlelimit:allArticles.body.substring(0, 5), searchValue: req.query.search, totalResults:thousands_separators(allArticles.length), count:0});
      }

    });
  } else {
    Article.find({}, function (err, allArticles) {
      if (err) {
        console.log(err);
      }else {
        res.render("article_search", {articles:allArticles, articlelimit:allArticles.body.substring(0, 5)});
      }
    });
  }
});

, ноя попробовал это ind он дал мне эту ошибку TypeError: Cannot read property 'substring' of undefined

и теперь я не знаю, что делать

Я использую node-js, MongoDB, mongoose и pug

ПРИМЕЧАНИЕ: он мне нужен ТОЛЬКО в nodejs, потому что, если пользователь отключает JavaScript на pug, он выводит весь текст статьи

1 Ответ

0 голосов
/ 12 октября 2019

Итак, после многих попыток я получаю этот ответ работающим:

let maximumArticleLenghtDisplay = 100;

for (var i = 0; i < allArticles.length; i++) {
   allArticles[i].body = allArticles[i].body.substring(0, maximumArticleLenghtDisplay);
}

Цикл for, который нужно поставить после поиска статей

Article.find({title: regex}, function (err, allArticles) {
      for (var i = 0; i < allArticles.length; i++) {
        allArticles[i].body = allArticles[i].body.substring(0, maximumArticleLenghtDisplay);
      }

И тогда вам не нужнопредел статьи

...