天天看点

使用Express3.0实现<Node.js开发指南>中的微博系统

特别说明:本实例仅在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

使用Express3.0实现&lt;Node.js开发指南&gt;中的微博系统

package.json (使用*默认会获取最新的)

使用Express3.0实现&lt;Node.js开发指南&gt;中的微博系统

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会报错。

最后来张实际运行的效果图:

使用Express3.0实现&lt;Node.js开发指南&gt;中的微博系统

如果对本实例有任何疑问或者有兴趣与我进行交流、讨论,可以使用E-mail与我联系(email地址详见blog左上角),不保证立即回复,敬请谅解:)

继续阅读