此错误是根据定义的路由/函数的顺序出现的,我还搜索了此错误发生的不同原因,但没有遇到此特定原因
//Save Task
router.get("/tasks/newrec",function(req,res,next){
var newtask={
title:"newtask5",
isdone:"true"
}
db.tasks.save(newtask,function(error,result){
if(error){res.send(error); }
else
{ res.send("success"); }//res.json(result);}
});
});
如果我首先声明此功能,那么如果我将其声明为第二个或第三个功能,我会发现没有错误,然后我看到此错误。我正在使用mongojs使用节点。
var express=require('express');
var router=express.Router();
var mongojs= require('mongojs');
var db=mongojs('taskdb',['tasks']);
//display all tasks
router.get('/tasks',function(req,res,next){
db.tasks.find(function(err,tasks){
res.json(tasks);
});
});
//To find single record with id
router.get('/tasks/:id',function(req,res,next){
var uid = req.params.id.toString();
db.tasks.findOne({_id:mongojs.ObjectId(uid)},function(err,doc){
res.json(doc);
});
});
//Save Task
router.get("/tasks/newrec",function(req,res,next){
var newtask={
title:"newtask5",
isdone:"true"
}
db.tasks.save(newtask,function(error,result){
if(error){res.send(error); }
else
{ res.send("success"); }//res.json(result);}
});
});
可能与声明的路径顺序相关,有时我遭受了。这些是您的道路:
- /任务
- /tasks/:ID
- /tasks/newRec
所有3个都是获取方法。问题之所以出现,是因为某些请求路径以多个路径匹配。例如,/任务/某物在第二个中匹配,但在第一个中匹配。即使/任务/newRec,您都认为它与第三个匹配,但它与3个路径匹配。并按照您声明的顺序表达道路,因此它永远不会进入第三条道路。这就是为什么我认为Express提出错误的原因。基本规则是针对每种HTTP方法,始终始终声明更具体的路径。就您而言,这将是正确的顺序:
- /tasks/newRec
- /tasks/:ID
- /任务
您相反。希望它有帮助
您可以以另一种方式解决它,如果不按路线顺序解决这是解决方案创建新文件checkobjid.js并放置此代码
const mongoose = require("mongoose");
// middleware to check for a valid object id
const checkObjectId = idToCheck => (req, res, next) => {
if (!mongoose.Types.ObjectId.isValid(req.params[idToCheck]))
return res.status(400).json({ msg: "Invalid ID" });
next();
};
module.exports = checkObjectId;
并应用您的任务路线
router.get('/tasks/:id',checkObjectId (id),function(req,res,next){
var uid = req.params.id.toString();
db.tasks.findOne({_id:mongojs.ObjectId(uid)},function(err,doc){
res.json(doc);
});
});