Page 147 - Node.js开发指南
P. 147
140 第 6 章 Node.js 进阶话题
127.0.0.1 - - [Thu, 5 Apr 2012 15:29:28 GMT] "GET /stylesheets/bootstrap.css HTTP/1.1"
304 - "http://127.0.0.1:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3)
AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19"
127.0.0.1 - - [Thu, 5 Apr 2012 15:29:28 GMT] "GET /favicon.ico HTTP/1.1" 404 - "-"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko)
Chrome/18.0.1025.162 Safari/535.19"
为了产生一个错误,我们修改routes/index.js 中“ / ”的响应函数,加入以下代码:
throw new Error('An error for test purposes.');
再次访问 http://127.0.0.1:3000/,可以看到 error.log 输出了完整的错误内容,如下所示:
[Thu Apr 5 2012 23:33:21 GMT+0800 (CST)] /
Error: An error for test purposes.
at Object.<anonymous> (/byvoid/microblog/routes/index.js:7:11)
at nextMiddleware (/byvoid/microblog/node_modules/express/node_modules/connect/
lib/middleware/router.js:175:25)
at param (/byvoid/microblog/node_modules/express/node_modules/connect/lib/
middleware/router.js:183:16)
at pass (/byvoid/microblog/node_modules/express/node_modules/connect/lib/
middleware/router.js:191:10)
at Object.router [as handle] (/byvoid/microblog/node_modules/express/
node_modules/connect/lib/middleware/router.js:197:6)
at next (/byvoid/microblog/node_modules/express/node_modules/connect/lib/
http.js:203:15)
at /byvoid/microblog/node_modules/express/node_modules/connect/lib/middleware/
session.js:323:9
at /byvoid/microblog/node_modules/express/node_modules/connect/lib/middleware/
session.js:342:9
at /byvoid/microblog/node_modules/connect-mongo/lib/connect-mongo.js:151:15
at /byvoid/microblog/node_modules/connect-mongo/node_modules/mongodb/lib/
mongodb/collection.js:885:34
这样,一个简单有效的日志功能就这样实现了。
6.3.2 使用cluster模块
从0.6 版本开始,Node.js 提供了一个核心模块:cluster。cluster的功能是生成与当
前进程相同的子进程,并且允许父进程和子进程之间共享端口。Node.js 的另一个核心模块
child_process 也提供了相似的进程生成功能,但最大的区别在于cluster 允许跨进程端
口复用,给我们的网络服务器开发带来了很大的方便。
为了在外部模块调用app.js,首先需要禁止服务器自动启动。修改app.js,在app.listen
(3000); 前后加上判断语句:
if (!module.parent) {
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port,
app.settings.env);
}