mongoose CastError: Cast to ObjectId failed for value
restfull路由如下:
router.get('/:id', controller.show);
mongoes代码如下:
exports.show = function(req, res) {
Notice.findById(req.params.id, function (err, notice) {
if(err) {
res.json({no:0,msg:'获取失败:'+err});
}else{
var result = {no:1};
result.obj=notice;
res.json(result);
}
});
};
客户端访问:
http://192.168.0.165:9000/api/notices/11
打印结果如下;
{
"no": 0,
"msg": "获取失败:CastError: Cast to ObjectId failed for value \"11\" at path \"_id\""
}
具体原因参考:
http://stackoverflow.com/questions/14940660/whats-mongoose-error-cast-to-objectid-failed-for-value-xxx-at-path-id
Mongoose's findById method casts the id parameter to the type of the model's _id field so that it can properly query for the matching doc. This is an ObjectId but "11" is not a valid ObjectId so the cast fails.
如果客户端传递的是mongo ObjectId就不会报以上错误.例如以下访问方式:
http://192.168.0.165:9000/api/notices/41224d776a326fb40f000001 就不会报错.
{
"no": 1,
"obj": null
}
在正常情况下,客户端传递的id参数是从后台获取的ObjectId,但是为了严谨性现在做以下处理:
exports.show = function(req, res) {
var id = req.params.id;
if (id.match(/^[0-9a-fA-F]{24}$/)) {
Notice.findById(id, function (err, notice) {
if(err) {
res.json({no:0,msg:'获取失败:'+err});
}else{
var result = {no:1};
result.obj=notice;
res.json(result);
}
});
}else{
res.json({no:0,msg:id+'不存在'});
}
};
mongoose CastError: Cast to ObjectId failed for value的更多相关文章
- express+gulp构建项目(二)启动项目和主文件
这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ...
- 深入浅出mongoose
深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...
- [转] 深入浅出mongoose-----包括mongoose基本所有操作,非常实用!!!!!
深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...
- Node.js躬行记(4)——自建前端监控系统
这套前端监控系统用到的技术栈是:React+MongoDB+Node.js+Koa2.将性能和错误量化.因为自己平时喜欢吃菠萝,所以就取名叫菠萝系统.其实在很早以前就有这个想法,当时已经实现了前端的参 ...
- mongoose手动生成ObjectId
用mongoose驱动保存数据,如果_id没有定义,那么在save的时候,mongoose驱动会自己生成一个_id.那么如果需要手动生成可以用mongoose.Types.ObjectId()方法. ...
- mongoose和mongodb的几篇文章 (ObjectId,ref)
http://mongoosejs.com/docs/populate.html http://stackoverflow.com/questions/6578178/node-js-mongoose ...
- mongoose ObjectId.toString()
node中一般我们经常对id进行判断,有的id是string类型,有的是ObjectId(''),这时候就可以使用mongoose的toString方法,将它转换成string
- Mongoose 两个表关联查询aggregate 以及 Mongoose中获取ObjectId
Mongoose 两个表关联查询aggregate 通常两个表关联查询的时候,是一种一对多的关系,比如订单与订单详情就是一对多的关系,一个订单下面有多个商品 数据模拟 首先我们先将数据模拟出来,先选择 ...
- Node.js Mongoose数据库连接失败 提示:Authentication failed
mongoose.connect('mongodb://username:password@127.0.0.1:27017/qianxunkefu_db')换成mongoose.connect('mo ...
随机推荐
- tomcat环境搭建
前言 学习任何一门技术的都需要环境的搭建,Hello world成为学习的开端.今天我就为大家带来tomcat的环境搭建过程. 配置环境变量 右击我的电脑->属性->高级系统设置-> ...
- Linq to sql并发与事务
本文转载:http://www.cnblogs.com/lovecherry/archive/2007/08/20/862365.html 检测并发 首先使用下面的SQL语句查询数据库的产品表: se ...
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略
分治策略有一种“大事化小,小事化了”的境界,它的思想是将原问题分解成两个子问题,两个子问题的性质和原问题相同,因此这两个子问题可以再用分治策略求解,最终将两个子问题的解合并成原问题的解.有时,我们会有 ...
- PHP安全编程:主机文件目录浏览(转)
除了能在共享服务器上读取任意文件之外,攻击者还能建立一个可以浏览文件系统的脚本.由于你的大多数敏感文件不会保存在网站主目录下,此类脚本一般用于找到你的源文件的所在位置.请看下例: 01 <?ph ...
- linux中 vi / vim显示行号或取消行号命令
1. 显示行号 :set number 或者 :set nu 2. 取消行号显示 :set nu! 3. 每次打开都显示行号 修改vi ~/.vimrc 文件,添加:set number
- Java基础知识强化之IO流笔记08:异常的注意事项
1. 异常注意事项: (1)子类重写父类方法时候,子类的方法必须抛出相同的异常或者父类异常的子类.(父亲坏了,儿子不能比父亲更坏) (2)如果父类抛出多个异常,子类重写父类时候,只能抛出相同的异常或者 ...
- ajax提交富文本,内容被截断,解决方法及思路
问题描述: 使用百度的UEditor富文本插件用于前端富文本编辑,后端使用jsp,提交普通文本没有问题,后来发现在提交某些指定文本时,数据查回的数据出现不完整现象:第一件事就是想到“垃圾编辑器”
- .NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱
.NET六大剑客:栈.堆.值类型.引用类型.装箱和拆箱 一.“堆”,“栈”专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道...“堆”,“栈”是什么?哦,这个知道... 之前我也写过一篇堆栈 ...
- Overload和Override的区别?
Overload和Override的区别? Override是重写:方法名称.参数个数,类型,顺序,返回值类型都是必须和父类方法一致的.它的关系是父子关系Overload是重载:方法名称不变,其余的都 ...
- Hive学习之二 《Hive的安装之自定义mysql数据库》
由于MySQL便于管理,在学习过程中,我选择MySQL. 一,配置元数据库. 1.安装MySQL,采用yum方式. ①yum install mysql-server,安装mysql服务端,安装服 ...