在nodejs中转换为对象id时抛出错误

时间:2018-03-22 06:56:33

标签: javascript node.js mongodb mongodb-query postman

我正在处理一个任务,我正在从数据库集合中生成id并将其传递给postman ..我正在将它转换为数据库obejct id创建并且如果我们传递正确的id,则将其工作accinlg正在抛出错误

$postText = "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy.";
$ellipsis = "...<a class='see-more' href='http://example.com/seemore-link'>read more</a>";
if (($len = strlen($postText)) > 170 && ($pos = strpos($postText, ' ', 170)) && ++$pos < $len){
    $postText = substr_replace($postText, $ellipsis, $pos);
}
echo $postText;

当我没有传递有效输入时,它会抛出以下错误

mongo.get().collection("post").find({"_id":new ObjectId(req.headers.postid)}).toArray(function(err, result) {
       if (err) throw err;

         if(result.length==0){              
            jsonObj.response="post id entered is invalid ";
            res.send(jsonObj)
        }
        else{
        //some operations
        }
    }

3 个答案:

答案 0 :(得分:1)

1 -

如果您正在使用猫鼬,并且如果_id您实际上不需要转换传递的id,那么您是在尝试执行搜索操作到objectId。只需使用

 mongo.get().collection("post")find({"_id" : req.headers.postid })

这不会将传递的id强加给monogdb的objectId,因为mongo db中的objectId遵循特殊模式。喜欢

12字节结构,ObjectId的前4个字节表示自UNIX纪元以来的秒数。

ObjectId的后3个字节代表机器标识符。

ObjectId的下两个字节表示进程ID。

ObjectId的最后3个字节表示随机计数器值。

如果你传递的id不能构造成上面描述的模式,那肯定会抛出像你一样的错误

<强> 2

我对这种方法不是很确定,但您可以首先检查id是否通过

var id = null;
try {
 id  =  new ObjectId(req.headers.postid)
  mongo.get().collection("post").find({"_id":id}).toArray(function(err, result) {
....

}
 catch(error) {
 console.error(error);
 //there must be error with the id
} 

答案 1 :(得分:1)

if(!validator.isMongoId(req.headers.postid)){
 res.send("invalid post id ")
}
else{
 mongo.get().collection("post").find({"_id":new ObjectId(req.headers.postid)}).toArray(function(err, result) {
       if (err) throw err;

         if(result.length==0){              
            jsonObj.response="post id entered is invalid ";
            res.send(jsonObj)
        }
        else{
        //some operations
        }
    }
}

之前安装验证器npm模块

答案 2 :(得分:0)

如果你对和尚没事,你可以使用它。
var Id = require('monk').id(req.headers.postid);