nodejs开发微博实例


Posted in NodeJs onMarch 25, 2015

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

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

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

nodejs开发微博实例

这和书本所用的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代码到我们新建的文件上面。然后运行代码,就能看到下面的效果了:

nodejs开发微博实例

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

为了执行下面的操作,我们首先需要安装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, {}));

可能会出现下面的问题:
nodejs开发微博实例
博主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');

会出现:

nodejs开发微博实例

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

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

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

nodejs开发微博实例

一开始我也是琢磨不透,但是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());

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

nodejs开发微博实例

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

以上就是本文的全部内容了,请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

NodeJs 相关文章推荐
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
nodejs中实现阻塞实例
Mar 24 #NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 #NodeJs
nodejs中实现sleep功能实例
Mar 24 #NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 #NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 #NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 #NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 #NodeJs
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
Python合并字符串的3种方法
2015/05/21 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
PHP面试题附答案
2015/11/28 面试题
护士长竞聘演讲稿
2014/04/30 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年消防工作总结
2015/04/24 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
HTML常用标签超详细整理
2022/03/19 HTML / CSS