《Node.js开发指南》MicroBlog项目的问题汇总

原创 2014年04月02日 19:10:58

重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!!


最近对Node产生了点兴趣,就看了《Node.js开发指南》一书,按照书中的例子敲完了所有代码。书是好书,非常适合新手学习,但是例子中的代码太旧,造成一些麻烦,以下列出来供大家参考:《Node.js开发指南》MicroBlog项目完整代码下载


问题一:
安装 ejs 模板的语法有问题,安装不成功,如下:
express -t ejs microblog

需要改成:
express microblog -e

问题二:
partial 方法已经不能用了,可以用include代替,如下:
<ul><%- partial('listitem', items) %></ul>

需要改成:
<% items.forEach(function(listitem){ %>
<% include listitem %>
<% }) %>

问题三:
helpers 和 dynamicHelpers 方法已经不能用了,如下:
app.helpers({
     inspect: function(obj) {
          return util.inspect(obj, true);
     }
});
app.dynamicHelpers({
     headers: function(req, res) {
          return req.headers;
     }
});
app.get('/helper', function(req, res) {
     res.render('helper', {
          title: 'Helpers'
     });
});

需要改成:
var util = require('util');
app.locals({
     inspect: function(obj){
          return util.inspect(obj, true);
     }
});
app.use(function(req, res, next){
     res.locals.headers = req.headers;
     next();
});
app.get('/helper', function(req, res){
     res.render('helper',{
          title: 'Helpers'
     });
});

还需要注意的是,上面这段代码需要放在 app.use(app.router); 前面。

问题四:
express3.*已经不支持layout方法了,所以要改成include才能正常显示首页。
在 views 文件夹下新建,header.ejs 和 footer.ejs。
layout.ejs 中的内容,以 <%- body %> 为界限,上面的内容写入header.ejs ,下面的内容写入footer.ejs
然后在 index.js 中加入 <% include header.ejs %> 和 <% include footer.ejs %>,把表单内容,写在中间即可

问题五:
配置mongodb时,很多报错:
app.js中的 var settings = require('../settings'); 应改成 var settings = require('./settings');
app.js中的 app.use(express.bodyParser()); 应该去掉
app.js中的 var MongoStore = require('connect-mongo'); 应改成 var MongoStore = require('connect-mongo')(express);

问题六:
出现 has no method 'router' 问题,解决办法如下:
保留原来的 app.use(app.router); 不要按作者的说法改成 app.use(express.router(routes));
并且在 app.js 最末尾加上 routes(app);
而且还要删除掉 app.js 中的
app.get('/', routes.index);
app.get('/u/:user', routes.user);
app.post('/post', routes.post);
app.get('/reg', routes.reg);
app.post('/reg', routes.doReg);
app.get('login', routes.login);
app.post('login', routes.doLogin);
app.get('/logout', routes.logout);

问题七:
req.flash 方法不能用,解决办法如下:
运行>npm install connect-flash 安装组件
并在app.js中加入:
var flash = require('connect-flash');
app.use(flash());

问题八:
Error: Cannot use a writeConcern without a provided callback
    at Db.ensureIndex (D:\Work\code\nodejs\microblog\node_modules\mongodb\lib\mongodb\db.js:1395:11)
解决办法如下:
\models\user.js 中的 collection.ensureIndex('name', {unique: true}); 改成collection.ensureIndex('name', {unique: true}, function(err, user){});
\models\post.js 中的 collection.ensureIndex('user'); 改成collection.ensureIndex('user' ,function(err, post){});

其中参考了不少其他朋友的帖子,也供大家参考:
跟着《Node.js 开发指南》写MicroBlog实例总结
使用Express3.0实现<Node.js开发指南>中的微博系统 
《node.js开发指南》(中文)观后感      
express:node throwing error on mongodb 

欢迎来到 石佳劼的博客,如有疑问,请在「原文」评论区 留言,我会尽量为您解答。


版权声明:本文为博主原创文章,欢迎转载,但需注明出处。

Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问题

最近在看《Node.js开发指南》,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了,     书上命令为:     1     express -t ejs ...
  • Before_Morning
  • Before_Morning
  • 2015年12月16日 10:33
  • 1045

用Nodejs完成自己的个人博客

开始这个个人小项目已经有一段时间了,一直断断续续的,直到今天总算是初见雏形,所以就很想和大家分享一下实现的过程。首先这个的初衷就是学习nodejs,看了几天的书,自己就照着书上的代码来敲,可是由于自己...
  • Picking_up_stones
  • Picking_up_stones
  • 2017年06月03日 14:06
  • 2532

nodeJs+express+mongoDB开发个人博客

项目简介本项目是基于nodeJs开发的一个个人博客系统,由于此前对于node的不熟,总共历时3周时间(平时有点懒…),一边学习其语法,一边开发博客系统,由于其博客是仿照CSDN博客开发的,所以如果有一...
  • qq_33050575
  • qq_33050575
  • 2017年01月09日 17:12
  • 1740

用node.js 搭建的博客程序心得(node.js实战读书笔记1)

node.js学习
  • a413883127
  • a413883127
  • 2016年07月11日 16:36
  • 2803

NodeJs+Mongodb用法

学习《Node.js入门指南》中的微博案例,折腾了好久,总算可以运行了,在这里将Node.JS的Mongodb中用法抽离出来,以备后用。     1、首先将Mongodb框架安装到项目中。使用的版本...
  • u010529455
  • u010529455
  • 2015年01月15日 23:15
  • 504

flask入门的教程-模板Templates

文章转自 :https://github.com/WapeYang/The-Flask-Mega-Tutorial/blob/master/templates.rst 感谢原作者的付出 转...
  • oXiFangShiBai
  • oXiFangShiBai
  • 2014年05月06日 01:17
  • 1048

Smobiler实现列表展示—GridView(开发日志十二)

一、列表功能展示   二、详细步骤 2.1,列表控件设计部分 2.1-① 在窗体SmoiblerForm1中添加gridview控件   2.1-② 在属性栏设置gridvie...
  • Rabbit199077
  • Rabbit199077
  • 2016年03月31日 10:02
  • 700

Smobiler实现类似朋友圈功能—MicroBlog控件(开发日志十七)

近两年来玩微信的亲们越来越多,有没有对微信朋友圈的功能很感兴趣了,大家跟我一起做一个微信朋友圈的功能吧! 步骤一:拖入一个MicroBlog控件到窗体中,如图 拖入MicroBlog控...
  • Rabbit199077
  • Rabbit199077
  • 2016年04月07日 11:13
  • 962

nodejs开发指南中,microblog微博系统的开发相关

1. 安装ejs模板的命令有问题,安装不成功 因为在express3.X以下版本中, -t命令参数已经失效 express -t ejs microblog 需改成: express ...
  • u012862227
  • u012862227
  • 2017年12月05日 18:13
  • 19

记最近一次Nodejs全栈开发经历

背景:前段时间大部门下新成立了一个推广百度OCR、文字识别、图像识别等科技能力在金融领域应用的子部门。因为部门刚成立,基础设施和人力都是欠缺的。当时分到我们部门的任务是抽调一个人做新部门主站前端开发工...
  • yisuowushinian
  • yisuowushinian
  • 2017年07月22日 16:42
  • 5137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《Node.js开发指南》MicroBlog项目的问题汇总
举报原因:
原因补充:

(最多只允许输入30个字)