npm install express-partialsstep 2:修改package.json里面的dependencies,添加"express-partials": "*",并执行一下命令获得最新版
npm installstep 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; });