《nodejs开发指南》微博实例express4.x版

郑重声明,本文章属于个人原创,如需转载,请加上原文链接:
http://segmentfault.com/blog/yuanzm/1190000002620309
另外同样可以在博客园上面查看本文章:http://www.cnblogs.com/yuanzm/p/3770986.html
源代码在本人的Github上面:https://github.com/yuanzm/microblog

之前一直执着于前端开发,最近几天,开始学起了nodejs。作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的。但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题。

为了开始学习nodejs,一开始选择了《深入浅出nodejs》这本书,看了几章之后,得出一个结论是:真是一本好书,但是还是不会写nodejs!然后选择了另外一本教材《nodejs开发指南》,由于看过了《深入浅出nodejs》,直接跳过了这本书的前几章,写起了该书第五章的微博实例。作为一个新手,在写的过程中,才逐渐发现因为express版本升级的原因,书中的代码很多已经不能用了,这对于新手来讲,真是痛苦的经历!!本着分享和学习的精神,特此奉上《nodejs开发指南》微博实例express4.x版本源码和编写过程中需要注意的问题。

首先我们看看当前express的版本:

图片描述

这和书本所用的express2.x版本已经有了很大的变化。对于express4版本的新特性,可以看看这个:http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0

话不多说,我们开始我们创建项目之旅。

首先我们新建一个文件夹,用cmd进入文件夹,准备创建项目。按照书中提到的,创建项目的命令应该是:

    express -t ejs microblog

问题是express -t参数已经失效,最新的express版本的默认模板引擎是jade,所以为了使用ejs,我们需要像下面这样创建项目:

    express -e ejs microblog

按照书中所说的,我们直接运行代码:

    supervisor app.js

并且在浏览器中输入http://localhost:3000/,并不能看到书中需要的效果,而是需要在app.js中app.use('/', routes);后面添加:

     app.listen(3000);
     Console.log(something happening);

按照书中的步骤往下走,我们会发现一个问题,因为在views文件夹里面不是layout.ejs和index.ejs,这是因为,最新版本的express不支持ejs模块的partials方法,所以需要自己额外安装模块:

    npm install express-partials

然后在app.js中添加:

    var partials = require('express-partials');
app.use(partials());

需要注意的是,这一行要添加到app.set('view engine', 'ejs');后面,如果添加到app.use('/', routes);后面,会出现css引用失败的现象,博主还不明白原因。

这时候就可以在views中新建文件layout.ejs,然后复制书中112页的layout.ejs代码到我们新建的文件上面。然后运行代码,就能看到下面的效果了:

图片描述

以上的步骤都不算什么问题,问题就出在连接数据库的一系列问题!如下所述:

为了执行下面的操作,我们首先需要安装MongoDB数据库,博主推荐这篇博客:http://be-evil.org/install-mongodb-on-windows7.html

看了不少安装MongoDB的博客,这个是博主见过最有效的。

  对于新版本的express,按照书本上那样连接数据库会报错,连接数据库需要的文件时settings.js,这个按照书上的来没有问题,但是models中的db.js需要做一些改动。如果按照书中的代码:

    var settings = require('../settings');
    var Db = require('mongodb').Db;
    var Connection = require('mongodb').Connection;
    var Server = require('mongodb').Server;
    module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_
    PORT, {}));

可能会出现下面的问题:
图片描述
博主google之后,才发现需要按照下面的格式书写:

     var settings = require('../settings'),
         Db = require('mongodb').Db,
         Connection = require('mongodb').Connection,
         Server = require('mongodb').Server;
     module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}), {safe: true});

在引用settings模块的时候,如果按照书中的:

    var settings = require('../settings');

会出现:

图片描述

这是因为最新的express版本中需要这样引用这个模块:

    var settings = require('./settings');

但是解决了这个问题之后,相继出现了下面这个令人蛋疼的情况:

图片描述

一开始我也是琢磨不透,但是google的时候,有一个哥们做了很好的解答:

http://www.cnblogs.com/yumianhu/p/3709558.html

也就是说,在express4中我们需要自己安装express-session包,然后添加引用:

    var session    = require('express-session');

原来的数据库引用也需要改成:

    var MongoStore = require('connect-mongo')(session);

而这些代码:

    app.use(express.session({
    secret: settings.cookie_secret,
    store:new MongoStore({
      db: settings.db
    })
}));

就需要改写成:

    app.use(session({
        secret: settings.cookie_secret,
        store: newMongoStore({
          db : settings.db,
        })
      }));

对于书中提到的视图交互,原本的代码是:

    app.dynamicHelpers({
        user: function(req, res) {
            return req.session.user;
        },
        error: function(req, res) {
            var err = req.flash('error');
            if (err.length)
                return err;
            else
                return null;
        },
        success: function(req, res) {
            var succ = req.flash('success');
            if (succ.length)
                return succ;
            else
                return null;
        },
    });

在最新版本的express中需要改成:

    app.use(function(req, res, next){
      console.log("app.usr local");
      res.locals.user = req.session.user;
      res.locals.post = req.session.post;
      var error = req.flash('error');
      res.locals.error = error.length ? error : null;

      var success = req.flash('success');
      res.locals.success = success.length ? success : null;
      next();
    });

注册页面中用到了flash,但是最新版本的express已经不支持flash了,你需要先使用npm install connect-flash。然后在app.js中添加如下代码:

    app.use(flash());

接下来按照书上的步骤走,基本不会出问题了,最后我们就能得到我们想要的效果啦~:

图片描述

需要说明一下的是,跟着书本写这个小应用的时候,出现了很多问题,也就是上面遇到的很多问题,但是博主都是本着自主研究的精神不断google,终于跳出神坑,得到了最后的效果,希望看到这篇博客的朋友好好研读,也好好看看下面的链接,里面很可能也是你遇到的问题,如果你在跟着书本编写代码的过程中遇到了问题,欢迎一起交流~

参考资料:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Node.js开发指南》是一本针对Node.js进行详细讲解的书籍。Node.js是一个基于Chrome运行时平台的JavaScript运行环境,可以让JavaScript具备了操作文件、搭建服务器等传统后端语言的能力。在当今Web开发领域,Node.js已经成为前后端开发分离、高并发处理、服务器端渲染等方面的首选技术。相比于其他后端开发语言,Node.js以其轻便、高效、快速的特点,受到广泛的欢迎。 《Node.js开发指南》全面系统地介绍了Node.js的安装、基础语法、模块化编程、异步编程、网络编程、文件操作等关键知识点。此外,书中还详细介绍了Node.js常用的框架及其他扩展技术,如Express、Koa、WebSocket、MySQL、MongoDB等。书中既包含理论知识,也包含大量实战案例,配有详细的代码及注释。不仅适合Node.js初学者学习,也适合已有一定基础的开发者深入学习和应用。 总之,对于想要掌握Node.js技术的开发者来说,《Node.js开发指南》是一本很实用的参考书,具有较高的实用性和指导性。它让读者可以快速掌握Node.js的基础、技术以及应用,有助于提升开发效率和提高编码水平。 ### 回答2: Node.js开发指南是一本非常实用的技术书籍,涵盖了一系列Node.js开发方面的知识,包括Node.js基础、Web应用开发、Node.js网络编程、Node.js模块开发、Node.js性能优化等等。读者可以学习到Node.js的各种特性和技术,快速入门Node.js开发。 在这本书中,你将学习到如何使用Node.js和相关的技术栈来构建高性能、高可拓展性的Web应用程序。它不仅涵盖了常见的Node.js基础,还介绍了如何使用Node.js开发可靠和可扩展的后端服务,如何进行测试和调试,如何管理模块和本控制。此外,本书还包括了许多实用的例子和案例分析,可以帮助你更好地理解和应用所学知识。 Node.js开发指南是一本适合各种技术背景的读者的书籍,不论是初学者还是有经验的开发人员都可以从中获益。它是一本详实、易于理解的参考书,可以帮助你快速入门并掌握Node.js的开发技巧。 总之,Node.js开发指南是一本非常实用的技术书籍,如果你想深入学习Node.js并将其应用于实际开发中,这本书绝对值得一读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值