req.params.id在24位十六进制代码之前给出一个冒号


app.post("/campsites/:id/comments", function(req, res){
Campsites.findById(req.params.id.substring(1,), function(err, campsite){
if(err)
console.log(err);
else{
console.log("Campsite found");
Comment.create(req.body.comment, function(err, comment){
if(err)
console.log(err);
else{
console.log("Comment Created");
campsite.comments.push(comment);
console.log("Comment Pushed");
campsite.save();
console.log("Campsite Updated");
res.redirect("/campsites/" + campsite._id);
console.log("Redirected");
}
});
}
});
});

req.params.id在id之前返回一个冒号,这就是我必须使用子字符串的原因。知道为什么吗?

如果没有看到生成指向该端点的URL的代码,最有可能的解释是您的URL包含该冒号。如果您是Express的新手,那么定义路由时使用的冒号仅由Express的解析器用于指示URL的该部分是可变的,并且应该根据冒号后面的内容进行命名。将URL的整个:variable-name部分替换为值,而不仅仅是冒号后面的部分,用于向该端点发送请求。

我的猜测是,在将数据发送到url时,不应该在其中包含冒号例如:路线app.get("/getTrekData/:trekName"(url应该是http://localhost:3000/getTrekData/Ooty不应该http://localhost:3000/getTrekData/:Ooty

您可能应该尝试从一个请求中接受两个param。

app.post("/campsites/:id/:comments", function(req, res){
//your code
} 

并且作为CCD_ 2来访问两者。parameterName如果这不起作用,试着用console.log(req.params)看看它能给你什么

如果您想将注释作为主体元素,则不需要将其指定到URL中,则代码可能是

app.post("/campsites/:id", function(req, res){
//your code
} 

以CCD_ 5和CCD_并通过CCD_ 7确定两者的值。

最新更新