#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, поскольку сообщение не могло быть найдено без параметра.