节点应用程序不正确地重定向到路由

时间:2016-02-04 07:27:29

标签: node.js express

背景:我正在制作遵循REST约定的节点应用。它是一个简单的应用程序,允许经过身份验证的用户发布猫的图片,这些图片显示在索引页面上。

问题:当用户点击按钮添加新猫时,此代码会运行:

router.get('/cats/new', isAuthenticated, function(req,res) {

    console.log('went to /cats/new');

    res.render('new', {user: req.user});
});

但是,用户永远不会访问new页面,因为此代码也会运行:

router.get('/cats/:id', function(req,res) {

    var id = req.params.id;

    Cat.findById(id).populate('comments').exec(function(err, cat) {

          if (err) {
              console.log('entering get /cats/:id');

            console.log(err);

        } else {

            console.log('no errror yet');

            console.log(cat.comments);

            res.render('show', {cat:cat});

      }
      });
});

我不明白为什么会这样,我看着负责渲染new的按钮,看起来很好; <a class="btn btn-primary" href="/cats/new">Add new cat</a>

如果我将router.get('/cats/new..')更改为cat/new,则此错误会消失。

当我尝试编辑有关猫的详细信息时,会发生同样的事情。以下路线应该运行并将用户重定向到user页面:

router.put('/cats/:id', function(req,res) {

    console.log('beginning /cat/:id');

    Cat.findByIdAndUpdate(
        req.params.id, req.body.cat, function(err, updatedCat) {

            if (err) {
                console.log(err);

            } else {

                console.log('------------ req.body.cat');
                console.log(req.body.cat);

                console.log('------------ updated cat');
                console.log('updated cat');
                res.redirect('user');
                console.log('not redirecting');
            }

        });   
});

但是,用户返回router.get('/cats/:id..)。事实上,我的控制台打印not redirecting

要使用put和delete请求,我使用的是method-override

我发布以下/cats/的整个路线文件:

var express = require('express');
var router = express.Router();
var User = require('../models/user.js');
var Cat = require('../models/cat.js');
var Comment = require('../models/comment.js');




//middleware
function isAuthenticated(req,res,next) {

    req.isAuthenticated() ? next() : res.redirect('/login');
}

router.get("/", function(req,res) {

    res.redirect("cats");
}); 

router.get('/cats', function(req,res) {

    Cat.find({}, function(err, cats) {
        if (err) {
            console.log(err);

        } else {
          res.render('cats', {cats: cats});  
        }  
    });
});


router.get('/cats/new', isAuthenticated, function(req,res) {

    console.log('went to /cats/new');

    res.render('new', {user: req.user});
});

router.post('/cats', isAuthenticated, function(req,res) {

    console.log('went to post /cats');
    var name = req.body.name;
    var image = req.body.url;
    var owner = req.user.username
    var description = req.body.description;

    cat = new Cat({
        name: name,
        image: image,
        owner: owner,
        description: description     
    });

    cat.save();

    User.findById(req.user._id, function(err, user) {
        if (err) {
            console.log(err);

        } else {
            user.cats.push(cat);
            user.save(); 

        }
    })

     res.redirect('cats');

    });



router.get('/cats/:id', function(req,res) {

    var id = req.params.id;

    Cat.findById(id).populate('comments').exec(function(err, cat) {

          if (err) {
              console.log('entering get /cats/:id');

            console.log(err);

        } else {

            console.log('no errror yet');

            console.log(cat.comments);

            res.render('show', {cat:cat});

      }
      });
});


router.post('/cats/:id', isAuthenticated, function(req,res) {


    console.log(isAuthenticated);

    var id = req.params.id;

    Cat.findById(id, function(err, cat) {
        console.log('findById running');

        if (err) {
            console.log(err);
            console.log('err finding cat');
            res.redirect('/cats');

        } else {


            console.log('before Comment.create');
            Comment.create(req.body.comment, function(err, comment) {

                console.log('after Comment.create');
                if (err) {
                    console.log(err);  

                } else {


                    console.log('right after 2nd else');

                    comment.author.id = req.user._id;

                    console.log(req.user._id);
                    console.log(req.user.username);

                    comment.author.username = req.user.username; 
                    comment.cat = id;
                    comment.save();

                    console.log('after saving comment');
                    cat.comments.push(comment);
                    cat.save();
                    console.log('saved cat');


                    User.findById(req.user._id, function(err, user) {

                        if (err) {
                            console.log(err);

                        } else {
                            user.comments.push(comment);
                            user.save();
                            console.log('saved user');
                        }
                    });

                    console.log(comment);
                    res.redirect("/cats/" + cat._id);                
                }
            });
        }
    });
});

router.get('/cats/:id/edit', function(req,res) {

    var id = req.params.id;

    Cat.findById(id, function(err, cat) {

        if (err) {
            console.log(err);
        } else {
             res.render('edit.ejs', {cat:cat});
        }
    });  
});


router.put('/cats/:id', function(req,res) {

    console.log('beginning /cat/:id');

    Cat.findByIdAndUpdate(
        req.params.id, req.body.cat, function(err, updatedCat) {

            if (err) {
                console.log(err);

            } else {

                console.log('------------ req.body.cat');
                console.log(req.body.cat);

                console.log('------------ updated cat');
                console.log('updated cat');
                res.redirect('user');
                console.log('not redirecting?');
            }

        });

});

module.exports = router;

0 个答案:

没有答案