2016-02-29 50 views
0

所有:如何知道接口规范通到node.js的http.Server

我非常新的socket.io,当我去通了文档(新快报3/4部分尤其是),有有一个例子:

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

什么我想了解的是这一行:

var server = require('http').Server(app); 

这里的文件:https://nodejs.org/api/http.html#http_class_http_server 让我更糊涂了,我不知道任何人都可以给一点德泰l如何阅读这些文档(包括Node.jsExpress.js API)以及如何找出该“应用”应该是什么样子,以便它可以传递到require('http').Server

感谢

+0

它在上一行创建'app'。它的快速应用程序。 – Robbie

+0

@Robbie谢谢,我的困惑是关于如何知道“快速应用”的外观?所以如果我使用其他库构建的“应用程序”,我怎么知道我是否可以通过它来要求('http')。 (与JAVA Doc比较:每个java param都有一个扩展类型或一个接口实现) – Kuan

回答

0

这一切有点混乱,但的http.Server合同基本是预期接受2个参数的请求处理函数:req, res。对象表达式为你创建的实际上是一个函数,实际上是作为一个http请求处理程序使用的,所以它可以一起工作,但它可能相当混乱,因为除了作为函数之外,实例app实例是一个复杂对象代表整个快速应用程序,因此它具有许多其他属性。但是像function (req, res) { console.log('Request received')}这样简单的东西可以很好地作为http.Server的参数。

另一种方式来连接这些点会做到这一点,并确认的东西居然还很好地工作:

var server = require('http').Server(function (req, res) { 
    app(req, res) 
}); 

然后你意识到你的函数只是传递参数通过对app未经修改,因此是不必要的。