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

时间:2018-02-09 12:08:10

标签: node.js express mean-stack mongojs

此错误是根据定义的路线/功能的顺序发生的,我也搜索了此错误发生的不同原因但是没有遇到这个具体原因

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

});

2 个答案:

答案 0 :(得分:1)

可能与路径声明的顺序有关,我有时会遭遇它。 这些是你的路径:

  • /任务
  • /任务/:ID
  • /任务/ newrec

所有3种都是GET方法。出现问题是因为某些请求路径在多个路径中匹配。例如,/ tasks / something在第二个匹配,但在第一个匹配。甚至/ tasks / newrec,你认为它与第三个匹配,但它与3个路径匹配。并按照您声明的顺序表达路径,因此它不会进入第三条路径。这就是我认为快递提出错误的原因。 基本规则是每个HTTP方法始终声明更具体的路径。在您的情况下,这将是正确的顺序:

  • /任务/ newrec
  • /任务/:ID
  • /任务

恰恰相反。 希望它有所帮助

答案 1 :(得分:-1)

如果不按路线顺序求解,则可以用另一种方法求解 这是解决方案 创建新文件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);
    });
});
相关问题