我知道这里已经提到了这类问题。我也看了下面的问题。但它没有帮助,那些问题处理参数是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
文件的链接,但它没有帮助。
答案 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
})
答案 2 :(得分:0)
页面加载时也会加载错误路由的styles.css文件。
因此,发送:batchid时,它将首先发送所需的id,然后立即也加载“ styles.css”文件,并且指向错误的路径。
所以实际上您的路由不正确。
这是您应该做的:
在app.js文件中包括以下行。
app.use(express.static( __dirname + "/public"));
在您的styles.css链接标记中,
<link rel="stylesheet" href="/stylesheets/style.css"/>
就我而言,styles.css文件保存在public / stylesheets / style.css中,请根据您自己的文件夹结构按照说明进行操作。
在链接标记的href开头注意“ /”。