《node.js开发指南》微博系统 4.x版 2016年最新实现方法(基于mysql,使用sequelize)

    如果你照着书上的代码照抄,是无论如何也实现不了这个例子的。说实话,这是我第一次遇到这种情况。这说明学习node.js这种不是很成熟的技术还是有风险的。不过还好,通过查询node.js的中文社区,express 4.x的API,以及在实现这个例子当中发现的程序猿找解答神器--stack overflow!(哈哈,博主对自己的英语还是相当自信的),在边餐厅打工,边每天晚上磨一点之后,实现了

    《node.js开发指南》微博系统 4.x版 2016年最新实现方法(基于mysql,使用sequelize)_第1张图片

 

    首先,相信大家很多人通过百度会发现此位大神提供的实现方法《nodejs开发指南》微博实例express4.x版.然而他的代码距离现在1年多了,在这中间,express项目发生许多变化。以下简称其为Y。

    废话不多说,直接开始说区别和一些准备工作 (和老版本一样的东西就不提了)

  1. 快速构建express应用的方法,请直接参考(zhaochao)express中文网的教程。细心的读者会发现最新的方法和Y的代码出入较大。
  2. 安装hotnode。(当然用其它的也行。我用的是这个,感觉作为调试够用了)
  3. app.js里的路由函数已经从app.get('/', routes.index),变成了app.use('/', routes),当然本质上还是在routes文件下下的index.js里编写路由处理函数。不过也变为了如下代码
    var express = require('express');
    var router = express.Router();
    
    router.get('/', function(req, res, next) 
    {
         dosomething
    });
            如何理解以上代码同样请参考express中文网关于模块化路由的解释
  4. 模版引擎默认变为了jade,而不是ejs。如果你想使用默认的,请参考jade教程,否则你将app.js里的app.set('view engine', 'jade');改为app.set('view engine', 'ejs'),这样你就基本可以照抄书上的了。一开始使用jade会不习惯,大家可以慢慢试着摸索,这里我就不详细说了。(我使用的是jade,毕竟跟着官方走嘛)
  5. 在使用app.use(flash());之前,必须设置session,这里使用的是express-session的中间件。sessionID是保存在cookie当中的,所以有cookie参数,设置持续时间。
    app.use(session({secret: 'keyboard cat',cookie: { maxAge: 300000 }}));
    express-session的具体使用方法,请去npm的官网——express-session。在这里我想提一句,学习node.js的一些非核心模块的函数,我觉得最好是直接去上面的网站查阅相应package的英文文档。每个函数都讲的非常明白。
     
  6. 按照书上的md5加密操作,在使用第二次以后就会网页就会报错,我至今不明白为什么,于是只得在别人那copy来一段解决的代码。
    var crypto = require('crypto');  
    
    var encrypt = function(data) {  
        return crypto.createHash('md5').update(data).digest('hex').toUpperCase();  
    }  

  7. 我用的是sequelize操作mysql,原因是我多次安装mongoDB失败。在我看来使用哪个数据库并无影响,只需要保持对外的使用接口一致。(想使用mysql的,可以看我写的简易的squelize的使用方法,若要继续深入学习请去sequelize的官网)
  8. 前端框架bootstrap,我不知道是不是bootstrap有无更新的原因,像作者所用的导航栏,错误提示,首页“欢迎来到微博”的背景以及横向排列都无法正常显示,于是我使用了另外的导航栏,错误提示应为alert-danger,而不是alert-error。但关于使用row无法横向排列这个问题,我暂时还不清楚,因为暂时对bootstrap了解甚少。
  9. 另外我不知道mongoDB是不是基于异步的I/O,反正我使用sequelize操作时,会遇到发表微博后,页面并不会马上显示,而是要手动刷新一下。原因我立马想到了由于异步I/O,跳转的操作先执行,所以使用setTimeout函数,强行设置一段时间之后再跳转页面。

github上的完整项目代码

你可能感兴趣的:(nodejs)