最近刚开始接触nodejs,看到知乎上有人推荐《nodejs开发指南》这本书,看了看讲的也还不错,就开始上手。但是由于出版年份+科技进步太快,导致很多代码出现了版本性问题。没碰到一个问题我就要上网查阅大量资料才能解决,很费时间。所以想把这些问题整理记录下来,供大家参考。
因为这个是几天前完成的,所以对于有些问题可能遗漏掉了,但是我们可以在评论区中相互探讨。如果有不正确的地方也欢迎大家指正。
源代码稍后附链接。
由于版本更新,很多模块从express中进行了拆分或重组,导致我们安装的modules跟书上例子不一样。这是我安装的全部模块,供大家参考。
"dependencies": {
"body-parser": "~1.13.2",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"express": "~4.13.1",
"jade": "~1.11.0",
"morgan": "~1.6.1",
"serve-favicon": "~2.3.0",
"mongodb":">=1.4.8",
"connect-mongo": "~1.0.2",
"express-session": "~1.0.4",
"connect-flash":"*"
}
其中要重点注意的是”connect-mongo”的版本问题,不能太低,否则会出现一个什么奇葩的报错。具体是什么我忘记了…以后一定勤于记录。
还会出现 *** is not a function 的报错。一般情况下,如果你的代码没有错误的话,就是模块未加载或者未初始化。如我遇到的报错flash is not a function 就是因为我没有初始化。在使用flash函数之前,应该:
var flash = require('connect-flash'); //加载模块
app.use(flash()); //初始化
如果要去http://localhost:3000预览效果的话,还要自己在app.js里添加app.listen(3000);
才能监听3000端口。
这是出问题最多的一部分。容我回忆回忆~
首先要安装mongodb,这个很简单没什么。后面还要注册为本机服务,大家可以去网上找一下相关文章也不难,就是一句话的事。但是我在注册过程中一直报错Invalid command: files\mongoDB\log\log.txt 。我折腾了好久,才找到了问题所在:路径中有空格,会当做一个参数处理。只要用引号引起来就可以了。。。
mongod.exe --logpath="D:\Program Files\mongoDB\log\log.txt" --logdb="D:\Program Files\mongoDB\
data\db" --directoryperdb --serviceName MongoDB --install
报错信息DEFAULT_PORT is not defined ,就是说mongodb数据库的默认端口未定义,我在这里固定为27017就好了。
module.exports = new Db(settings.db, new Server(settings.host, 27017, {}), {safe:true});
其它还有很多代码部分的改动,我就不一一说明了,请大家参照我的Github上的源代码。
首先应检查对应路径控制器的回调函数。
比如我在添加了Post模型之后,再访问首页就会报错Cannot read property ‘length’ of undefined 。开始我一直以为是我jade语法的问题,可是在线检测没问题。于是我就想是不是回调函数的问题。果然,我没有把posts
传到模板引擎中。于是加进去就OK了。
安利给大家一个好东西——Jage在线转换为HTML
最后我想说,虽然现在网络很发达,也提倡大家遇到问题自行gogle,但是我希望大家不要忘记:google的前提是自己分析了这个问题,未果,才去万维网需求帮助的。以前我就存在这个问题,只要报错就把问题复制粘贴找答案,虽然最后问题也能解决,但是没有一个自我思考、自我推理的过程,就很难得到进步。望读到这篇文章的盆友们引以为鉴,有则改之无则加勉。