【发布时间】:2013-04-06 09:39:27
【问题描述】:
使用 Node.js hello world 示例:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
我试图找到 http.js 中的 createServer “查找”函数的位置,然后将两个对象传递给它(上面分别命名为 'req' 和 'res'。我搜索了 http.js 和我唯一发现的是:
exports.createServer = function(requestListener) {
return new Server(requestListener);
};
这是否意味着匿名函数:
function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}
...作为“requestListener”传递并且...
return new Server(requestListener);
...req 和 res 对象是从哪里传回来的?
【问题讨论】:
-
实际上
requestListener在服务器对象上发出“请求”事件时被调用。查看.emit('request'在line 2017 ofhttp.js附近的位置 -
@Dan D. 那么这是否意味着当服务器收到请求时,emit 会将 req 和 res 传递给匿名函数?
-
是的,通过 EventEmitter 模式。与在服务器构造函数中一样,它具有
this.addListener('request', requestListener);,其中.emit在内部路由.emit('request', req, res);.emit在这种情况下使用事件的侦听器列表'request',并等效于使用传递的参数调用侦听器。 -
@JohnGalt,另一个问题,回调中的 req 和 res 究竟是什么类型。我在文档中找不到它们
-
嗨 jason,req 和 res 或者只是对象...要查看它们包含的所有内容,只需记录它们 console.log(req)。
标签: node.js