【问题标题】:NodeJS error when rendering page:Cast to ObjectId failed for value "styles.css" at path "_id"渲染页面时出现 NodeJS 错误:路径“_id”处的值“styles.css”转换为 ObjectId 失败
【发布时间】:2016-03-16 16:05:23
【问题描述】:

该错误导致我的网页无法呈现。如标题所述,错误在于styles.css,当我取出这个文件时,我没有收到任何错误。

styles.css 包含在单独的headers.ejs 文件中,该文件添加到所有页面中,但只有一个路径显示错误(/cats/new)。我在路线周围放置了一些日志,似乎当我输入/cats/new/ 时,我会自动重定向到新路线(get /cats/:id)。我想知道这是否是错误的原因?

我在下面附上了我的路线和完整的错误消息:

路线

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('/cat/' + req.params.id);
                console.log('not redirecting?');
            }

        });


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

    var id = req.params.id;
    console.log('YOU ARE TRYING TO DESTROY A CAT!');

    Cat.findByIdAndRemove(id, function(err) {

        if (err) {
            console.log(err);
            res.redirect('/user');
        } else {
            res.redirect('/user');
        }
    });    
})    

});

module.exports = 路由器;

错误:

entering get /cats/:id
{ [CastError: Cast to ObjectId failed for value "styles.css" at path "_id"]
  message: 'Cast to ObjectId failed for value "styles.css" at path "_id"',
  name: 'CastError',
  kind: 'ObjectId',
  value: 'styles.css',
  path: '_id',
  reason: undefined }

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    您似乎在在您的模板中使用相对路径包含styles.css

    因此,当您导航到 /cats/:id 时,它会尝试加载 /cats/styles.css

    为了避免这种情况,您必须使用绝对路径(例如:/styles.css/public/styles.css - 我建议从专用的基本路径提供静态文件)。

    【讨论】:

    • 我其实用的是绝对路径; app.use(express.static('public'));,另外,css 文件在我的所有其他路径中都呈现得非常好。
    • @Frosty619 我的意思是在你的模板中。
    • @Frosty619 你可能正在做类似<link rel="stylesheet" type="text/css" href="styles.css"> 的事情,而你应该做的是<link rel="stylesheet" type="text/css" href="/styles.css">
    • 解决了!谢谢(:
    【解决方案2】:

    前往

    <head>
    

    改变

    <link rel="stylesheet" href="style.css">
    

    <link rel="stylesheet" href="/style.css">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 2017-05-19
      • 2017-11-10
      • 2016-11-11
      • 2017-03-26
      • 2017-05-26
      • 2020-05-20
      • 2019-01-06
      相关资源
      最近更新 更多