有什么区别:
http.Server(function(req,res) {});
和
http.createServer(function(req,res) {});
解决方法
根据nodejs的源代码(下面的解析),createServer只是一个帮助程序来实例化一个服务器.
- exports.Server = Server;
- exports.createServer = function(requestListener) {
- return new Server(requestListener);
- };
因此,您在原始问题中提到的两个代码段中唯一真正的区别是,您没有使用新的关键字.
为了清楚起见,Server构造函数如下(在2012-12-13之后):
- function Server(requestListener) {
- if (!(this instanceof Server)) return new Server(requestListener);
- net.Server.call(this,{ allowHalfOpen: true });
- if (requestListener) {
- this.addListener('request',requestListener);
- }
- // Similar option to this. Too lazy to write my own docs.
- // http://www.squid-cache.org/Doc/config/half_closed_clients/
- // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F
- this.httpAllowHalfOpen = false;
- this.addListener('connection',connectionListener);
- this.addListener('clientError',function(err,conn) {
- conn.destroy(err);
- });
- }
- util.inherits(Server,net.Server);