node.js学习笔记——《node.js开发指南》代码中需要注意的几点
来源:互联网 发布:js正则匹配子字符串 编辑:程序博客网 时间:2024/05/21 09:34
在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;
});
- node.js学习笔记——《node.js开发指南》代码中需要注意的几点
- Node.js开发指南学习笔记
- node.js学习笔记(—)
- [node.js学习笔记一]《node.js开发指南》学习笔记
- Node.js开发指南
- Node.js开发指南
- node.js开发的几点安全技巧
- node.js学习笔记1——node.js是什么
- node.js 学习笔记——node.js 环境配置
- node.js开发指南笔记1
- 初看node.js开发指南笔记
- Node.js开发指南学习记录1
- node.js的开发学习
- javascript中JS文件的引用需要注意几点
- 《Node.js开发指南》实例中遇到的问题
- 对于node.js开发指南中博客案例的修改实现(二)--代码
- Node.js学习笔记(2)——新建简单的node.js模块
- Node.js学习笔记(一)—— Node基础
- if 语句查询判断中文有问题
- Android之ListView滚动到底后自动加载数据
- chm文件中的中文显示乱码,AutoDetect=1
- Device eth0 does not seem to be present delaying initialization
- JDK 1.5 1.6 1.7特性
- node.js学习笔记——《node.js开发指南》代码中需要注意的几点
- C/C++连接MySql数据库
- Android开发应用从入门到精通(奋斗之小鸟)_PDF 电子书
- C#全局键盘钩子
- win7+VS2010/2012+cocos2d-x-V2.1.4 环境安装+使用模板(2)
- 粗解Xcode 5新特性: Asset Catalogs
- 英尺到米的转换
- android源码地址及下载介绍
- AVI 格式视频编码种类