Почему get route показывает ошибку типа: не удается прочитать свойство ‘title’ с нулевым значением и сбой веб-сайта?

#node.js #express #mongoose #typeerror

#node.js #экспресс #мангуст #ошибка типа

Вопрос:

я создаю экспресс-приложение с mongodb в nodejs, когда я делаю запрос get на маршрут show posts, тогда все сообщения отображаются правильно, когда я передаю их в ejs-файл, но после отображения страницы show на терминале появляется ошибка

events.js: 291 выдает ошибку; // Необработанное событие ‘error’ ^ Ошибка типа: не удается прочитать свойство ‘title’ с нулевым значением

это мой get route в router/posts.js

     router.get("/commerce", (req,res)=>{
  
  if(req.query.search){
    var noMatch;
// gives search results on author name, content and title of the post
    const regex = new RegExp(escapeRegex(req.query.search), 'gi') 
    Post.find({$or: [{title:regex} , {content:regex}, {'author.username':regex}], subject: "commerce"}, function(err,allposts){
      if(err) console.log(err)
      else{
        
        if(allposts.length<1){
          noMatch = "No posts matched the search results , please try again"
        }
        console.log("searched", allposts)
        res.render("commerce", {posts: allposts, noMatch: noMatch, message: req.flash('success')});
      }
    })
    
  } else{
    Post.find({subject: "commerce"}, function(err,allposts){
      if(err) {
        console.log(err);
        res.statusCode = 500;
        res.end('error');
      }
      else{
        console.log("actually all posts",allposts)
        res.render("commerce", {posts: allposts, noMatch: noMatch , message: req.flash('success')});
      }
    })
  }
})
  

commerce.ejs

 <%- include("./partials/header1.ejs") %>
<link rel="stylesheet" href="/stylesheets/commerce.css">
<%- include("./partials/header2.ejs") %>
<div class="top-horiz-bar">
    <div class="logo-section-in-bar">
        <img class="top-img-logo" src="./finallogopic.png" alt="logo-pic" height="60px" width="60px">
        <!-- <img class="top-name-logo" src="./zoomed-brand-name.png" alt="logo-name" height="80px" width="130px"> -->
        <h2 class="top-name-logo">Backbanchers</h2>
    </div>


    <div class="other-icons">

    <div class="search-box">
        <input id="search-font" class="search-txt" type="text" name="" placeholder="Type to search">
        <a class="search-btn" href="#">
            <i class="fas fa-search"></i>
        </a>
    </div>
    <div class="person-account">
        <a class="account-info" href="#">
            <i class="far fa-user-circle fa-2x"></i>
            <span>Sign-in/up</span>
        </a>
    </div>
    </div>
</div>


<div class="vertical-nav-bar">
<a href="#">Home<span><i class="fas fa-home"></i></span></a>
<a class="blog-section-left" href="#">Blogs<span><i class="fas fa-user-graduate"></i></span>
<!-- <ul class="sections-blog">
    <a  class="option-blog" href="#"><li>Business amp; Economics</li></a>
    <a  class="option-blog" href="#"><li>Commerce</li></a>
    <a  class="option-blog" href="#"><li>Personality Devlopment</li></a>
</ul> -->
</a>
<a href="#">Authors<span><i class="fas fa-pencil-alt"></i></span></a>
<a href="#">Newsletter<span><i class="fas fa-newspaper"></i></span></a>
<a href="#">Contact US<span><i class="fas fa-phone-alt"></i></span></a>
<!-- <a href="#">Services<span><i class="fas fa-question"></i></span></a> -->
<a href="#">About Us<span><i class="fas fa-users"></i></span></a>
<!-- <a href="#">Services<span><i class="fas fa-question"></i></span></a> -->


</div>

<div class="all-engineering-articles">

    <div class="side-box">
        <div class="one-of-3-heading">
            <h2 class="side-box-heading-one">Trending</h2>
            <div class="sub-part-section">
            <h2 class="title-side-box">How 3D cameras with integrated data processing reduce the load on network and host PC</h2>
            <div class="date-side-box">
                <span>15 August 2020</span>
            </div>
        </div>

        <div class="sub-part-section">
            <h2 class="title-side-box">Indy Cars Get a Little Safer—Thanks to a 200  mph Windshield</h2>
            <div class="date-side-box">
                <span>15 August 2020</span>
            </div>
        </div>

        <div class="sub-part-section">
            <h2 class="title-side-box">Additive Manufacturing Qualification amp; Certification During Crises</h2>
            <div class="date-side-box">
                <span>15 August 2020</span>
            </div>
        </div>
        </div>


        <div class="two-of-3-heading">
            <h2 class="side-box-heading-two">Recommended</h2>
            <div class="sub-part-section">
                <h2 class="title-side-box">Autonomous Mobile Robots and Cobots Improve Worker Safety and Retention</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>

            <div class="sub-part-section">
                <h2 class="title-side-box">Sustainable Control Panel Design</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>

            <div class="sub-part-section">
                <h2 class="title-side-box">The Difference Between: Push-In Terminals versus Other Types of Connections</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>
        </div>


        <div class="three-of-3-heading">
            <h2 class="side-box-heading-three">Popular</h2>

            <div class="sub-part-section">
                <h2 class="title-side-box">
                    Why Using IIoT for Pneumatics is Simple, Yet Critical</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>

            <div class="sub-part-section">
                <h2 class="title-side-box">
                    IR Camera Captures Defects in 3D Printing</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>

            <div class="sub-part-section">
                <h2 class="title-side-box">Additive Manufacturing Qualification amp; Certification During Crises</h2>
                <div class="date-side-box">
                    <span>15 August 2020</span>
                </div>
            </div>
        </div>
    </div>

<% posts.forEach(function(post){ %>
    <div class="blog-post">
        <div class="blog-post__img">
            <img src="https://image.freepik.com/free-photo/cyborg-hand-pressing-keyboard-laptop-3d-rendering_117023-946.jpg" alt="article-pic" class="blog-post__article-img">
        </div>
        <div class="blog-post__info">
            <div class="blog-post__date">
                <span><%= post.publishDay%></span>
                <span><%= post.publish_date %></span>
            </div>
            <div class="author-name">
                <ul class="author-content">
                    <li class="name-aut"><%= post.author.username %>></li>
                    <li class="save-to-later"><i class="fas fa-plus "></i></li>
                </ul>
            </div>
            console.log(<%= post.title %>)
            <h1 class="blog-post__title"><%= post.title %></h1>
            <p class="blog-post__text"><%= post.content.substring(0,120) %></p>
            <a href="/posts/commerce/<%= post.slug %>" class="blog-post__cta">Read more</a>
            <ul class="btns-on-blogcard">
                <!-- <li class="btns-blog"><i class="far fa-eye fa-2x "></i></li> -->
                <li class="btns-blog"><i class="far fa-hand-peace fa-2x "></i></li>
                <li class="btns-blog"><i class="fas fa-share fa-2x "></i></li>
            </ul>
        </div>
    </div>
<% }) %>



<div class="page-end">
    amp;nbsp;
</div>

<div class="next-page">
    <h2 class="new-page-blogs">-Page 1 of 1- <span class="next-page-btn">Next page</span></h2>
</div>



</div>


<section class="footer" >
<footer id="foo">
    <div class="overall-footer">
        <div class="first-part">
            <h2 class="our-name"><a href="#">Backbenchers</a></h2>
            <a href="#"><img id="logo-of-learners" src="finallogopic.png" alt="our-logo" height="40%" width="14%"></a>
        </div>
        <div class="bordering-right">
            amp;nbsp;
        </div>



        <div class="second-part">
            <h2 class="second-links">Quick Links</h2>
            <ul class="ul-class-footer">
                <li class="quick-buttons"><a href="#">Home</a></li>
                <li class="quick-buttons"><a href="#Buisness-and-economics-start">Buisness amp; Economics</a></li>
                <li class="quick-buttons"><a href="#Commerce">Commerce</a></li>
                <li class="quick-buttons"><a href="#engineering">Engineering</a></li>
                <li class="quick-buttons"><a href="#personality-D">Personality Devlopment</a></li>
                
            </ul> 
        </div>



        

        <div class="third-party">
            
        <div class="name-social-footer">
        <li class="quick-buttons-2"><a href="https://www.facebook.com/" target="_blank">Facebook</a></li>
        <li class="quick-buttons-2"><a href="https://www.instagram.com/" target="_blank">Instagram</a></li>
        <li class="quick-buttons-2"><a href="https://www.linkedin.com/" target="_blank">LinkedIn</a></li>
    </div>
    <style>
        a{
            text-decoration: none;
            color: white;
        }
    </style>
             <div class="media-buttons-footer">
                <a class="btns-footer-class-1" href="#"><i id="facebook-1" class="fab fa-facebook-f "></i></a>
                <a class="btns-footer-class-2" href="#"><i id="instagram-1" class="fab fa-instagram "></i></a>
                <a class="btns-footer-class-3" href="#"><i id="linkedin-1" class="fab fa-linkedin-in "></i></a>
            </div> 
        </div>





        <div class="fourth-party">
            <h2 class="fourth-links">Social</h2>
            <a href="mailto:ritishgupta45@gmail.com">
            <span id="envolope-footer" class="fas fa-envelope fa-2x"></span>
            <span id="email-footer" class="text">Backbenchers@gmail.com</span>
            </a>
            
          

        <input id="name-id-id" type="email" placeholder="Name">
        <input id="email-id-id" type="email" placeholder="Email-id" required>
        <input id="leave-msg-id-id" type="text" placeholder="leave a message">
        <div class="send-button-footer">
            <button id="send-id-id" type="submit">Send</button>  
          </div>
        
        </div>




        
        <div class="fifth-party">
            <h2 class="fifth-links">Connect with Us</h2>
            <h2 class="heading-of-news-footer">Newsletter subscription</h2>
            <p class="para-of-news-footer">Subscribe to our fortnightly newsletter <br> to gain great knowledge exposure. <br> Also, stand a chance to participate <br> in brainstorming competitions <br> and win exciting prizes.</p>
            <div class="suscribe-footer">
                <input id="footer-suscribe-btns" type="email" placeholder="enter your email id" required>
                <div class="red-btn-suscribe">
                <button id="suscribing" type="button">Subscribe</button>
            </div>
        </div>
    </div>
    




    <div class="final-part">
        <div class="box-copy">
            amp;nbsp;
            <div class="btns-margin">
           <a href=""><h2 class="bottom-copy-footer">About Us</h2></a> 
            <a href=""></a><h2 class="bottom-copy-footer">Privacy Policy</h2></a>
           <a href=""> <h2 class="bottom-copy-footer">Terms and conditions</h2></a>
        </div>

        <h2 class="final-copywrite">copyright amp;copy; All Rights Reserved | Backbenchers</h2>
        </div>
    </div>

</footer> 
</section>





<%- include("./partials/footer.ejs") %>
  

вывод ss 1 из console.log («фактически все сообщения», allposts)

вывод ss 2 из console.log («фактически все сообщения», allposts)

в этих выходных файлах я добавил console.log («фактически все сообщения», allposts) перед res.render () и получил вывод, где печатаются все сообщения, и, наконец, также печатается null, откуда берется это null? , и после этого null на консоли выводится ошибка, как видно на скриншотах выше

Комментарии:

1. Измените console.log («фактически все сообщения», allposts) на console.log («фактически все сообщения»). Давайте посмотрим, появится ли null в терминале.

2. да, null все еще там

3. Что такое строка 197 в posts.js ?

4. строка 197 — это console.log («количество просмотров» post.title «есть» post.views); который находится внутри get route / commerce /:slug, где я нахожу post wrt slug и отображаю show.ejs, где показана эта конкретная статья, в строке 194 я сделал console.log (post), который печатает null (я думаю), но почему вызывается этот get route, если я просто перенаправлен в / commerce?

5. я решил это, это была тихая глупая ошибка, URL-адрес запроса должен был быть / commerce , но я запросил / commerce /, который является другим маршрутом, и ожидает пули после / в последнем запросе, который был пуст, поэтому он показывал сообщение null, поскольку сообщение не могло быть найдено без параметра.