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

来源:互联网 发布:js正则匹配子字符串 编辑:程序博客网 时间:2024/05/21 09:34

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

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

  step 1:安装 express-partial

1
npminstallexpress-partials

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

1
npminstall

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

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

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

 

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

1
varMongoStore = 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
npminstallconnect-flash

在app.js中使用:

1
2
3
4
varflash = 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
setNODE_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) {
    // 当一个子进程结束的时候,重新启动一个新的子进程
    deleteworkers[worker.pid];
    worker = cluster.fork();
    workers[worker.pid] = worker;
});
原创粉丝点击