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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 特别说明:本实例仅在windows xp sp3系统下测试通过(其它系统未经过测试)。 这本书,之前有评论过,但之前并不清楚express2.x与3.x会有如此大的差异,导致在写例子的过程中痛苦不已。

特别说明:本实例仅在windows xp sp3系统下测试通过(其它系统未经过测试)。

<node.js开发指南>这本书,之前有评论过,但之前并不清楚express2.x与3.x会有如此大的差异,导致在写例子的过程中痛苦不已。为了避免更多的同学在学习书的例子时,撞的头破血流,觉得还是有必要分享一下自己这次痛苦的经历。

讲实话,学习不是特别稳定和成熟的技术风险不小,例如这个express。3.x就删除了很多2.x的特性和功能(但好不容易买本书,书上并没有地方特别指出版本差异的问题,导致一开始就掉进一个坑里去了)。先看看书中的2.x与目前最新版本的3.x它们之间的差异:

2.x到3.x的迁移(Migrating from 2.x to 3.x)

删除:

   1: res.render() "status" option (use node's res.statusCode= or res.status(code).render(...))
   2: res.render() "charset" option (use res.charset=)
   3: res.local(name, value) (use res.locals.name = value or res.locals({ name: value }) instead)
   4: app.dynamicHelpers() (use middleware + res.locals)
   5: app.helpers() (use app.locals)
   6: the concept of a "layout" (template engine specific now)
   7: partial() (template engine specific)
   8: res.partial()
   9: "view options" setting, use app.locals
  10: "hints" setting
  11: req.isXMLHttpRequest (use req.xhr)
  12: app.error() (use middleware with (err, req, res, next))
  13: req.flash() (just use sessions: req.session.messages = ['foo'] etc)
  14: connect-flash can be used as middleware to provide req.flash()

发生发动的有:

   1: req.header(field[, defaultValue]) replaced by req.get(field) (remains for backwards compatibility)
   2: res.header(field[, value]) replaced by res.set(field, value) / res.get(field) (remains for backwards compatibility)
   3: res.send(body[, code]) is now res.send([code,] body)
   4: res.redirect(url[, code]) is now res.redirect([code,] url)
   5: res.json(obj[, code]) is now res.json([code,] obj)
   6: renamed app.register() to app.engine()
   7: template engine compliance from engine.compile(str, options) => Function to engine.__express(filename, options, callback)
   8: express.createServer() is now simply express() (but remains for BC)
   9: Use express.cookieParser('secret') instead of passing the secret to the express.session() middleware. The 'secret' option in the express.session() middleware has been removed.

 

以前可以直接用的很多特性,如果使用Express 3.x就得安装“插件”来支持了。

 

废话不多说了,分享一下使用Express3.x来实现书中微博系统的例子。

1、使用express projectName创建项目时,express的-t参数已经失效,你得手修改package.json和app.js文件来指定模块引擎,默认的为jade;因为jade模块写起来实在是让人蛋疼不已,我强烈建议换成ejs。这样你需要修改的文件:

app.js

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

2、connect-mongo的用法发生了变化,你需要使用下面的方法才行

   1: var MongoStore = require('connect-mongo')(express);

 

3、3.x默认已经不支持flash了,你需要先使用npm install connect-flash。然后在app.js中添加如下代码:

   1: var flash = require('connect-flash');
   2:  
   3: app.configure(function(){
   4:     app.use(flash());
   5: });

注意上述的代码,app.use(flash());要放在session之前(这个是我试出来的,原因还没去搞明白)

 

4、不支持ejs模块的partials方法,你需要使用npm install express-partials,然后在app.js中添加如下代码:

   1: var partials = require('express-partials');
   2:  
   3: app.use(partials());

5、在使用res.render时需要显式传入模块可能要用到的变量和数据,在使用partial时,也需要指定。ex:

   1: exports.index = function(req, res){
   2:     Post.get(null, function(err, posts) {
   3:         if (err) {
   4:             posts = [];
   5:         }
   6:         res.render('index', {
   7:             title: '首页',
   8:             posts : posts,
   9:             user : req.session.user,
  10:             success : req.flash('success').toString(),
  11:             error : req.flash('error').toString()
  12:         });
  13:     });
  14: };

需要在render时传入相应的数据{user:xx, error:xx}

index.ejs中如果需要载入其它ejs文件(例如同级目录下的posts.ejs文件)

   1: <%- partial('posts', {posts:posts}) %> 

如果不传入{posts:posts}的话,posts.ejs在使用posts会报错。

6、在使用mongodb来存储sessions时,你需要先安装MongoDB。如果安装MongoDB?,请参考这里>>

 

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

 

 

本示例用到的nodejs、MongoDB还有express等文件,已全部打包到一个文件中,有兴趣的同学可以从这里进行下载>>

 

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

目录
相关文章
|
前端开发 JavaScript Java
基于vue-node的共享车位管理系统的设计与实现_kaic
基于vue-node的共享车位管理系统的设计与实现_kaic
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
346 0
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
376 80
|
8月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
448 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
缓存 JSON JavaScript
Node.js模块系统
Node.js模块系统
84 1
|
监控 JavaScript API
局域网监控软件的实时通知系统:利用Node.js和WebSocket实现即时消息推送
本文介绍了如何使用Node.js和WebSocket构建局域网监控软件的实时通知系统。实时通知对于网络安全和家庭监控至关重要,能即时发送监控数据变化的通知,提高响应速度。通过Node.js创建WebSocket服务器,当数据变化时,监控软件发送消息至服务器,服务器随即推送给客户端。此外,还展示了如何利用Node.js编写API,自动将监控数据提交到网站,便于用户查看历史记录,从而提升监控体验。
428 3
|
10月前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
192 7
|
11月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
364 2
2024年5月node.js安装(winmac系统)保姆级教程
|
12月前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
415 1
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
114 2