node.js学习笔记——《node.js开发指南》代码中需要注意的几点

在express3下实现《node.js开发指南》中的microblog需要注意的几个问题:

1.express3.0默认不支持layout模板,解决办法如下:

  step 1:安装 express-partial

1
npm install express-partials

  step 2:修改package.json里面的dependencies,添加"express-partials": "*",并执行一下命令获得最新版

1
npm install

  step 3:在 app.js 中使用 express-partial

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

 OK,到此就可以正常使用 layout.ejs 了

 

2.mongodb连接错误,解决办法:

1
var MongoStore = require( 'connect-mongo' )(express);

 ps.注意阅读 connect-mongo 中的 Readme.md 文件中的说明

 

3. app.use(express.router(routes)); 报方法错误,解决办法如下:

1
2
3
4
5
6
7
8
9
10
app.configure( function (){
     app.set( 'views' , __dirname + '/views' );
     /*...*/
     /*注意下面两行内容*/
     //app.use(express.router(routes));
     app.use(app.router);
     app.use(express.static(__dirname + '/public' ));
});
                                                                        
routes(app); //这个是新加的

使用 app.use(app.router) 和 routes(app) 替代 app.use(express.router(routes))

 

4. flash 方法错误,express3也不再默认支持 flash方法,需要另外安装 connect-flash,方法如下:

1
npm install connect-flash

在app.js中使用:

1
2
3
4
var flash = require( 'connect-flash' );
app.configure( function (){
    app.use(flash());
});

当然,个人觉得基本上可以不需要使用flash,而采用session方式直接代替亦可,方法参考后文中关于session部分

 

5. dynamicHelpers 方法错误,express3也不再支持dynamicHelpers方法,解决办法如下:

1
2
3
4
5
6
7
8
app.use( function (req, res, next){
     res.locals.user = req.session.user;
     res.locals.err = req.session.error;
                                                    
     // console.log("err" ,  req.session.error);
                                                    
     next();
});

该处注意几个地方:res.locals可以理解成是client端的全局变量,而req.session则可以理解成是server端的全局变量。

所以,在可以直接在 routes/index.js 中这么写:

1
req.session.error = '两次输入的密码不同' ;

而在用于client页面渲染用的 views/layout.ejs 模板中这么写即可:

1
2
3
<% if (err) { %>
     <%= err %>
  <%}%>

注意: err 及 error 分别是client端(res.locals)和server端(req.session)中的局部变量。

 

6. NODE_ENV设置方法:

 windows xp下载cmd中使用命令set进行全局设置:

1
set NODE_ENV=production

通过以下代码查看当前运行的模式:

1
console.log( "Express server listening in %s mode" , app.settings.env);

通过以上代码也可以看出,所谓的模式其实也只是一个node.js中app的setting中的一个属性值,所以我们可以通过以下代码在单独的应用中设置,且优先级是最高的(相当于局部变量):

1
2
3
4
5
6
7
8
// 设置node.js的运行环境为 production
app.set( "env" , 'production' );
//app.set("env" , 'development');
         
// development only
if ( 'development' == app.get( 'env' )) {
   app.use(express.errorHandler());
}

 

7. cluster 中现成关闭事件监听的问题:

1
2
3
4
5
6
7
// 书中的 death 无效,需要使用 exit
cluster.on( 'exit' , function (worker) {
     // 当一个子进程结束的时候,重新启动一个新的子进程
     delete workers[worker.pid];
     worker = cluster.fork();
     workers[worker.pid] = worker;
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值