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);
                 }
   142   143   144   145   146   147   148   149   150   151   152