Node.js开发微博实例:Express 4.x版本适配指南

作者:夜航船

时间:2026-10-29

浏览:379

本文针对《Node.js开发指南》中的微博实例,详细解析在Express 4.x环境下运行代码时遇到的兼容性问题。内容涵盖项目创建、模板引擎配置、数据库连接修正、Session管理及视图交互等关键步骤,帮助前端开发者顺利升级并运行经典Node.js应用。

文章目录

Node.js微博实例:Express 4.x版本适配指南

此前我专注于前端开发,近期开始接触Node.js。作为前端开发者,能够使用JavaScript编写后端代码令人振奋。然而,后端开发与前端存在显著差异,学习过程中难免遇到诸多挑战。

初学Node.js时,我首选了《深入浅出Node.js》。阅读数章后,虽然认可其质量,但仍不知如何实际应用。随后转向《Node.js开发指南》,鉴于已阅读前书,直接跳过前几章,着手编写第五章的微博实例。作为新手,在编码过程中逐渐发现,由于Express版本升级,书中代码大多已失效,这对初学者而言颇为痛苦。本着分享与学习的心态,特此提供《Node.js开发指南》微博实例在Express 4.x版本下的源码及编写注意事项。

首先确认当前Express的版本信息:

Node.js微博实例:Express 4.x版本适配指南

这与书中使用的Express 2.x版本存在巨大差异。关于Express 4版本的新特性,可参考此链接:http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0

接下来,我们开始创建项目。

项目创建与模板引擎配置

首先新建一个文件夹,通过命令行进入该目录,准备初始化项目。按照书中指导,创建项目的命令应为:

  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代码复制至新建文件中。运行代码后,即可看到如下效果:

Node.js微博实例:Express 4.x版本适配指南

数据库连接与Session管理修正

上述步骤相对顺利,主要问题出现在数据库连接环节,具体如下:

执行以下操作前,需先安装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, {}));

可能会遇到以下错误: Node.js微博实例:Express 4.x版本适配指南 经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');

将会出现:

Node.js微博实例:Express 4.x版本适配指南

这是因为最新版Express需采用以下方式引用该模块:

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

解决此问题后,又接连出现令人困扰的情况:

Node.js微博实例:Express 4.x版本适配指南

起初难以理解,但Google搜索时,有博主提供了良好解答:

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

即在Express 4中,需自行安装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,
    })
   }));

视图交互与Flash功能适配

书中提到的视图交互,原代码为:

  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已不再支持。需先执行npm install connect-flash,然后在app.js中添加如下代码:

  app.use(flash());

此后按书中步骤操作,基本不会再出现问题,最终即可实现预期效果:

Node.js微博实例:Express 4.x版本适配指南

需说明的是,跟随书本编写此应用时遇到了诸多问题,即上述所述内容。博主凭借自主研究精神,通过不断Google搜索,最终摆脱困境,达成预期效果。希望阅读本文的朋友仔细研读,并查看下方链接,其中可能包含您遇到的问题。若在跟随书本编写代码时遇到困难,欢迎交流探讨。

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

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章