Ошибка CRUD-приложения Express.js: функция обновления неправильно перенаправляет - PullRequest
1 голос
/ 29 июня 2019

ОБНОВЛЕНИЕ:

Матус Дубрава, вы правы, из ядер, но я изменил эту строку на res.redirect('/post/show/' + pid);, и она все еще не работает.Маршрут: http://localhost:3000/post/edit/5d0fddd730d83f0c32c1e0ca

Фрагмент, отвечающий за показ отдельных сообщений, работает.Это:

app.get('/post/show/:id', function(req, res){
    Post.findById(req.params.id, function(err, post){
        res.render('single_post.pug', {
            post: post
        });
    });
});

Тем не менее, перенаправление с res.redirect('/post/show/' + pid); не работает.

Я работаю над базовым приложением CRUD с Node , MongoDB и Экспресс .Я использую Jade для представления объявлений Bootstrap 4 для стиля.

Существует функция редактирования сообщения, которая работает нормально, но в моем обновлении есть ошибка, которую я не смог обнаружить и исправить:

Вид формы редактирования:

h2 #{title}

form(action="/post/edit/" + post._id, method="POST")
    .form-group
        input.form-control(type="hidden", name="post_id", value=post.post_id)
    .form-group
        input.form-control(type="text", name="title", placeholder="Post title" value=post.title)
    .form-group
        input.form-control(type="text", name="category", placeholder="Post category" value=post.category)
    .form-group
        textarea.form-control(rows="5", name="body")= post.body
    .form-group
        input.btn.btn-sm.btn-block.btn-primary(type="submit", value="Update")

Код, соответствующий редактировать и обновление действия:

// Edit post
app.get('/post/edit/:id', function(req, res){
    Post.findById(req.params.id, function(err, post){
        res.render('edit_post.pug', {
            post: post
        });
    });
});


// Update post
app.post('/post/edit/:id', function(req, res){
    let post = {};
    post.pid = req.body.post_id;
    post.title = req.body.title;
    post.category = req.body.category;
    post.body = req.body.body;

    let query = {_id:req.params.id}

    Post.update(query, post, function(err){
        if (err) {
            console.log(err);
            return;
        } else {
            res.redirect('/post/show/' + pid);
        }
    });
});

Сообщение обновляется обновляется, но:

  1. URL-адрес перенаправления http://localhost:3000/post/show/:pid;
  2. Браузер показывает Cannot read property 'title' of undefined.

Где моя ошибка?

PS: Я не могу добавить весь код здесь, поэтому я собрал this paste-bin.

Ответы [ 3 ]

3 голосов
/ 29 июня 2019

Когда вы вызываете перенаправление, /post/show/:pid - это просто обычная строка, которую вы также можете увидеть по URL, на который вас перенаправляют - http://localhost:3000/post/show/:pid (см. Последнюю часть). Или, другими словами, :pid в строке не заменяется автоматически, в отличие от get или post методов app, которые выполняют эту замену внутри.

Вы можете просто построить строку самостоятельно

url = "/post/show/" + pid;
res.redirect(url);
2 голосов
/ 04 июля 2019

Я удивлен, что вы получаете так далеко, как без ошибки.Ошибка указывает на то, что вы не можете успешно получить объект post при отображении маршрута '/ post / show /: id'.Исходя из ваших фрагментов кода, похоже, что вы не передаете правильный идентификатор сообщения в своем URL-адресе перенаправления.

Вы можете ссылаться на свой идентификатор сообщения несколькими способами (например, req.body.post_id, post.pid илиreq.params.id), но вы не используете pid:

res.redirect('/post/show/' + pid);

pid.Попробуйте обновить код обновления следующим образом:

// Update post
app.post('/post/edit/:id', function(req, res){
    let post = {};
    post.pid = req.body.post_id;
    post.title = req.body.title;
    post.category = req.body.category;
    post.body = req.body.body;

    let query = {_id:req.params.id}

    Post.update(query, post, function(err){
        if (err) {
            console.log(err);
            return;
        } else {
            res.redirect('/post/show/' + req.params.id);
        }
    });
});
0 голосов
/ 03 июля 2019

Ваш код не имеет обработчика для /post/show/:pid или вы не показали полный код. Это также означает, что либо после завершения обновления вам необходимо снова вернуться на страницу редактирования. Если это так, то вам нужно изменить строку кода с

res.redirect('/post/show/:pid');

до

res.redirect('/post/edit/' + pid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...