博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
阅读量:6095 次
发布时间:2019-06-20

本文共 2436 字,大约阅读时间需要 8 分钟。

  hot3.png

在express3下实现《node.js开发指南》中的microblog需要注意的几个问题:
1. express3.0默认不支持layout模板,解决办法如下:
  step 1:安装 express-partial
npm install express-partials
  step 2:修改package.json里面的dependencies,添加"express-partials": "*",并执行一下命令获得最新版
npm install
  step 3:在 app.js 中使用 express-partial
var partials = require('express-partials'); app.use(partials());
 OK,到此就可以正常使用 layout.ejs 了
2. mongodb连接错误,解决办法:
var MongoStore = require('connect-mongo')(express);
 ps. 注意阅读 connect-mongo 中的 Readme.md 文件中的说明
3. app.use(express.router(routes)); 报方法错误,解决办法如下:
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,方法如下:
npm install connect-flash
在app.js中使用:
var flash = require('connect-flash');  app.configure(function(){   app.use(flash()); });
当然,个人觉得基本上可以不需要使用flash,而采用session方式直接代替亦可,方法参考后文中关于session部分 .
5. dynamicHelpers 方法错误,express3也不再支持dynamicHelpers方法,解决办法如下:
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 中这么写:
req.session.error = '两次输入的密码不同';
而在用于client页面渲染用的 views/layout.ejs 模板中这么写即可:
<% if(err) { %>     <%= err %> <%}%>
注意: err 及 error 分别是client端(res.locals)和server端(req.session)中的局部变量。
6. NODE_ENV设置方法:
 windows xp下载cmd中使用命令set进行全局设置:
set NODE_ENV = production
通过以下代码查看当前运行的模式:
console.log("Express server listening in %s mode", app.settings.env);
通过以上代码也可以看出,所谓的模式其实也只是一个node.js中app的setting中的一个属性值,所以我们可以通过以下代码在单独的应用中设置,且优先级是最高的(相当于局部变量):
// 设置node.js的运行环境为 production app.set("env" , 'production'); //app.set("env" , 'development');           // development only if ('development' == app.get('env')) {   app.use(express.errorHandler()); }
7. cluster 中现成关闭事件监听的问题:
// 书中的 death 无效,需要使用 exit cluster.on('exit', function (worker) {     // 当一个子进程结束的时候,重新启动一个新的子进程     delete workers[worker.pid];     worker = cluster.fork();     workers[worker.pid] = worker; });
 

转载于:https://my.oschina.net/jsan/blog/177565

你可能感兴趣的文章
50.3. resin.conf
查看>>
nodejs express
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘
查看>>
Nmon 性能:分析 AIX 和 Linux 性能的免费工具
查看>>
obs nginx-rtmp-module搭建流媒体服务器实现直播 ding
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
5G第二阶段测试年底收官 第三阶段测试明年一季度启动
查看>>
PowerDesigner概念模型与物理模型相互转换及导出数据字典
查看>>
温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)...
查看>>
Office Web Apps安装部署
查看>>
C++之static_cast, dynamic_cast, const_cast
查看>>
Java初级笔记-第二章
查看>>
android EditText长按屏蔽ActionMode context菜单但保留选择工具功能
查看>>
Git 遇到了 early EOF index-pack failed 问题
查看>>
统计学习方法(二)感知器C语音实现
查看>>
java-Netty学习(2)
查看>>
IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
查看>>