• 《node.js开发指南》中“微博系统”在express3.0+版本下的实现


    《node.js开发指南》 出版于2012年,作者是一位2010级的清华学生,是当时国内第一本讲node.js的中文书。 这本书适合于Node.js的入门学者,但是由于年代关系,并且由于Node.js这几年的飞速发展,该书的例子用法在现在已经不适用。本文整理了该书中实现的“微博系统”在express3.0下实现过程中,博主所遇到的问题,以及搜集到的解决方法,分享给各位。

    该博文写于2014年4月10日,用的Node的版本为0.10.5,express版本为3.2.4

    Node版本:

    express版本:

     
    1 express3.0默认不支持layout模板
      即生成的ejs文件中没有layout.ejs, 故博主舍弃了layout的写法,创建文件header.ejsfooter.ejs,将layout的头部和尾部分别写入header.ejsfooter.ejs中,要使用时就在其他ejs文件中用<%- include header %>和<%- include footer %>引用得到。
    2 在routes/index.js中添加module.exports = function(app)时,出现错误
         Error: .get() requires callback functions but got a [object Undefined]
    解决方法:
         在app.js中删除以下代码:
      
      
      并改为
    1   routes(app);
     
    3 app.use(express.router(routes));  报错
      
      解决方法:
           在app.js中,找到:
    1   app.use(express.router(routes));
         将之改为:
    1     app.use(app.router);
     
     
    3 Mongodb连接出错
      
      解决方法:
           在app.js中,将
    1   MongoStore = require('connect-mongo'); 
     
        改为  
    1   MongoStore = require('connect-mongo')(express);
     
     
    5 点击注册后 显示 ReferenceError: crypto is not defined
      
      解决办法:
        在routes/index.js中, 文件头部加入
    1    var crypto = require('crypto');
    2   var User = require('../models/user.js');
     
    6 不存在dynamicHelpers 的方法
      
      解决方法:
        在app.js中将dynamicHelpers部分的代码: 
    1   app.dynamicHelpers({
    2     /* .......*/
    3   });
        替换为:
    1   app.use(function(req, res, next){
    2      var error = req.flash('error');
    3     var success = req.flash('success');
    4     res.locals.user = req.session.user;
    5     res.locals.error = error.length ? error: null;
    6     res.locals.success = success.length ? success: null;
    7     next();
    8   });
    7  不存在flash方法
      解决方案:
           在新版express中去除了flash, 我们可以使用connect-flash代替之。
        在cmd中进入项目文件夹,安装connect-flash, npm install connect-flash
        并在app.js中添加以下代码 
    1   var flash = require('connect-flash');
    2   app.use(flash());
         注意: 要在flash的使用处之前添加。
     
     
    8  partial方式无法使用
      网上找到的方法是:
        在cmd中进入目录,安装partials,
    1     npm install express-partials    
      在app.js中添加以下代码
    1   var partials = require('express-partials');
    2   app.use(partials());

      可是博主这里出现posts的值没有传入的问题。于是博主抛弃了partial的用法,改为include用法。

      也就是将users.ejs改为:

    1     <% if (user) { %>
    2         <%- include say %>
    3     <% } %>
    4         <%- include post %>
  • 相关阅读:
    jQuery遍历之siblings()
    命名空间
    AnsiString
    《linux内核完全注释》读书笔记 2
    mciSendString
    PeekMessage, GetMessage, PostMessage, SendMessage
    c/c++中运行外部程序或打开文件(转)
    定义基类和派生类
    复制构造函数
    让StringGrid控件显示下拉菜单
  • 原文地址:https://www.cnblogs.com/oneX/p/3657364.html
Copyright © 2020-2023  润新知