快速路由错误“强制转换为数值失败”style.css“at path”

时间:2016-01-31 05:28:02

标签: node.js mongodb express routing

我知道这里已经提到了这类问题。我也看了下面的问题。但它没有帮助,那些问题处理参数是mongoose对象id。但在我的情况下,batch_id不是猫鼬对象id。

What's Mongoose error Cast to ObjectId failed for value XXX at path “_id”?

Express/Mongoose Router: 'Cast to ObjectId failed for value “undefined” at path “_id”'

这就是我所做的。

router.route("/view_by_batch/?:batchid").get(function(req,res){


    if(req.session.user){
        barcodeEntry.find({batch_id:req.params.batchid},function(err, data) {
            if (err) return console.error(err);
            res.render('view_by_batch',{ data: data,batch_no:req.params.batchid});
        });
    }else {
        res.render('index',{auth:false});
    }

});

我在控制台中收到以下错误

message: 'Cast to number failed for value "style.css" at path "batch_id"',
  name: 'CastError',
  kind: 'number',
  value: 'style.css',
  path: 'batch_id' }

即使我删除了style.css文件的链接,但它没有帮助。

3 个答案:

答案 0 :(得分:0)

此问题在于您在架构中将batch_id设置为数字,并且您在查询中传递style.css(字符串)。 Mongoose试图做像parseFloat(' style.css')这样的事情,但它失败了。因此,请确保

中的{batch_id:req.params.batchid}
barcodeEntry.find({batch_id:req.params.batchid},function(err, data)

是有意义的。

根据Express Doc1。路径中的?将被视为正则表达式字符。如果你只想匹配路径参数。将它设置为

更好
router.route("/view_by_batch/:batchid")

有关Express

中的req.params的更多信息,请参阅Express Doc

答案 1 :(得分:0)

我遇到过这样的问题。它是由路由器命令引起的。

您可以这样做:

router.route("/some/:id")
    .get(function(){
        // your code
    })

router.route("/some/other")
    .get(function(){
        // your code
    })

由于" / some /:id" 路线位于" / some / other" 路线之前。当您向" /某些/其他" 发送GET请求时,快递会将"其他" 视为的参数" / some /:id" 路线。所以你会遇到CastError。

解决方案:

让路线带有" id"在任何其他具有相同前缀路由的底部,问题将得到解决。

router.route("/some/other")
    .get(function(){
        // your code
    })

router.route("/some/:id")
    .get(function(){
        // your code
    })

Documentation

答案 2 :(得分:0)

页面加载时也会加载错误路由的styles.css文件。

因此,发送:batchid时,它将首先发送所需的id,然后立即也加载“ styles.css”文件,并且指向错误的路径。

所以实际上您的路由不正确。

这是您应该做的:

  1. 在app.js文件中包括以下行。

    app.use(express.static( __dirname + "/public"));
    
  2. 在您的styles.css链接标记中,

    <link rel="stylesheet" href="/stylesheets/style.css"/>
    
  3. 就我而言,styles.css文件保存在public / stylesheets / style.css中,请根据您自己的文件夹结构按照说明进行操作。

  4. 在链接标记的href开头注意“ /”。