特别说明:本实例仅在windows xp sp3系统下测试通过(其它系统未经过测试)。
<node.js开发指南>这本书,之前有评论过,但之前并不清楚express2.x与3.x会有如此大的差异,导致在写例子的过程中痛苦不已。为了避免更多的同学在学习书的例子时,撞的头破血流,觉得还是有必要分享一下自己这次痛苦的经历。
讲实话,学习不是特别稳定和成熟的技术风险不小,例如这个express。3.x就删除了很多2.x的特性和功能(但好不容易买本书,书上并没有地方特别指出版本差异的问题,导致一开始就掉进一个坑里去了)。先看看书中的2.x与目前最新版本的3.x它们之间的差异:
<a href="https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x" target="_blank">2.x到3.x的迁移(Migrating from 2.x to 3.x)</a>
删除:
发生发动的有:
以前可以直接用的很多特性,如果使用Express 3.x就得安装“插件”来支持了。
废话不多说了,分享一下使用Express3.x来实现书中微博系统的例子。
1、使用express projectName创建项目时,express的-t参数已经失效,你得手修改package.json和app.js文件来指定模块引擎,默认的为jade;因为jade模块写起来实在是让人蛋疼不已,我强烈建议换成ejs。这样你需要修改的文件:
app.js
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYmNlBDO3AjMkhzMkZjMiFDNhNjZ2gjM4gTYmNWM1YjZfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
package.json (使用*默认会获取最新的)
2、connect-mongo的用法发生了变化,你需要使用下面的方法才行
注意上述的代码,app.use(flash());要放在session之前(这个是我试出来的,原因还没去搞明白)
5、在使用res.render时需要显式传入模块可能要用到的变量和数据,在使用partial时,也需要指定。ex:
需要在render时传入相应的数据{user:xx, error:xx}
index.ejs中如果需要载入其它ejs文件(例如同级目录下的posts.ejs文件)
如果不传入{posts:posts}的话,posts.ejs在使用posts会报错。
最后来张实际运行的效果图:
如果对本实例有任何疑问或者有兴趣与我进行交流、讨论,可以使用E-mail与我联系(email地址详见blog左上角),不保证立即回复,敬请谅解:)