2016-02-29 14 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未經修改,因此是不必要的。

相關問題