设为首页 收藏本站
查看: 944|回复: 0

[经验分享] 使用Express3.0实现中的微博系统

[复制链接]

尚未签到

发表于 2017-2-24 08:47:00 | 显示全部楼层 |阅读模式
  特别说明:本实例仅在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() &quot;status&quot; option (use node's res.statusCode= or res.status(code).render(...))

   2: res.render() &quot;charset&quot; 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 &quot;layout&quot; (template engine specific now)

   7: partial() (template engine specific)

   8: res.partial()

   9: &quot;view options&quot; setting, use app.locals

  10: &quot;hints&quot; 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
DSC0000.png

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

  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?,请参考这里>>
  最后来张实际运行的效果图:
DSC0002.png

  本示例用到的nodejs、MongoDB还有express等文件,已全部打包到一个文件中,有兴趣的同学可以从这里进行下载>>
  如果对本实例有任何疑问或者有兴趣与我进行交流、讨论,可以使用E-mail与我联系(email地址详见blog左上角),不保证立即回复,敬请谅解:)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346388-1-1.html 上篇帖子: 减少js应用的侵入性 下篇帖子: node.js入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表