Как перенаправить после ошибки в Express - PullRequest
0 голосов
/ 28 июня 2019

Я использую Express для маршрутизации и MongoDB для моего простого блогового приложения Node (я новичок и только учусь), и мне нужно перенаправить на домашнюю страницу, если кто-то вводит неправильный URL, всякий раз, когда он пытается перенаправить сбой программы.

Вывод на терминал:

Server started on 3000
Rendered homepage
events.js:174
      throw er; // Unhandled 'error' event
      ^

TypeError: Cannot read property 'postTitle' of null at line 115

Параметры маршрутизатора / Get

//=== DYNAMIC POSTS ROUTE ===//
app.get("/posts/:postId", function(req, res){
    const requestedPostTitle = req.params.postId;
    Post.findOne({postTitle: requestedPostTitle}, function(err, foundPost){
        if (!err) {
//FAILS HERE IF INCORRECT URL IS ENTERED INTO BROWSER
            const title   = foundPost.postTitle;
            const date    = foundPost.postDate;
            const content = foundPost.postBody;
            /*res.send(foundPost.postDate);*/
            res.render(`post`, {
                  title: title,
                   date: date,
                content: content
            });

        } /*else {
        res.redirect(`/`);
        console.log(`404 ${requestedPostTitle} does not exist`);
        } */
    });
});

Программа завершится сбоем только в том случае, еслиЯ ввожу неверный URL, после этого ни одна из моих страниц не будет перезагружена (я полагаю, из-за обратного вызова (err)), я должен перезапустить свой сервер вручную, и все работает снова, nodemon не сбрасывает его, когда онне удается.

корневой вид:

<h1>HOME</h1>
<p><%= pageStartContent %></p>
<% posts.forEach(function(post){ %>
    <div class="post-box">
        <h3><%= post.postTitle %></h3>
        <p class="date"><%= post.postDate %></p>
        <p class="post-body"><%= post.postBody.substring(0,450) + "..." %></p>
         <a href="posts/<%= post.postTitle %>">Read More</a>
    </div>
<% }) %>

1 Ответ

1 голос
/ 28 июня 2019
app.get("/posts/:postId", function(req, res){
    const requestedPostTitle = req.params.postId;
    Post.findOne({postTitle: requestedPostTitle}, function(err, foundPost){
        if (!err && foundPost) {
//FAILS HERE IF INCORRECT URL IS ENTERED INTO BROWSER
            const title   = foundPost.postTitle;
            const date    = foundPost.postDate;
            const content = foundPost.postBody;
            /*res.send(foundPost.postDate);*/
            return res.render(`post`, {
                  title: title,
                   date: date,
                content: content
            });

        }  
        return res.redirect(`/`);
    });
});

код не работал раньше (возможно), потому что вы проверяете, есть ли ошибка, и если не отображается post, но это не означает, что сообщение было найдено, вам нужно проверить, не foundPost не null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...