错误:传递的参数必须是12个字节或24个十六进制字符的字符串



此错误是根据定义的路由/函数的顺序出现的,我还搜索了此错误发生的不同原因,但没有遇到此特定原因

//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);
    });
});

相关内容

最新更新