nodejs 由于是用javascript 这种弱类型语言进行开发,难免会出现各种让人意想不到的问题.最近就出现了一个:
mongoose 模块由于版本问题造成的:查询skip limit 在4.0.x上必须要是number 类型,做了严格的类型检查
这个版本之下的可以是'1',这样的 字符串,会自动转换为number.
由这个错误我总结:
1.mongoose 命令会将参数整合成一个json ,然后对json 进行格式和类型的检查,最后吧json发送到数据库端执行.
2.mongoose 版本升级将可能造成很大的被动.冒然升级会可能造成巨量的未知问题.数据库毕竟是个比较重要的环节,不
得不重视.
3.版本管理是一系列的问题 从最底层的系统 数据库 到数据库驱动模块,在项目开始之前 最好多多进行测试.找到稳定的搭配
,一旦确定后应该保持开发,测试,生产环境统一.
4.对于node环境来说 log非常的重要,很多问题可以通过有效的log,输出到前端,或者后端记录文件给出权限给程序员查看用来定位问题.生产机可是没有办法debug 跟踪调试的.
5.node 本身的版本问题也会造成模块的影响,这个最好在项目一开始就用tnvm 来管理版本,确定一个跟各个模块比较融合的node 版本.并且轻易的不要去升级node.
参考一个不错的关于nodejs package 版本控制的文章:
http://www.tuicool.com/articles/2aUB7j
一个node package有两种依赖,一种是dependencies,另一种是devDependencies,其中前者依赖的项是正常运行该包时所需要的依赖项,而后者则是开发的时候需要的依赖项,像一些进行单元测试之类的包。简单来记就是下面的 “dependencies”: {} //生产环境 “devDependencies”: {}//开发环境 在package.json所在目录执行npm install的时候,devDependencies里面的模块也会被安装的。如果我们只想安装dependencies里面的包,可以执行 npm install –production 如果只安装devDependencies,可以执行 npm install –dev 同理,使用npm install node_module –save自动更新dependencies字段值,使用npm install node_module –save-dev自动更新devDependencies字段值。
另外附上:npm list node_module_name 可以查看某个已经安装的模块的版本.因为有时候没有--save 到package.json中去,或者是copy过来的模块(估计是invalid的原因).