2016-03-26 72 views
3

大家好我是新來的js節點,並開始研究和開發一些教程。我只是想更好地理解或澄清我的疑問。所以我碰到了內置模塊http。這有助於創建基本的Web服務器。現在express模塊是一個構建在http module之上的Web框架,它可以輕鬆使用完全楔入的Web服務器而無需重新發明輪子。現在我遇到了這個代碼:爲什麼要將http模塊與express模塊​​結合

var express = require('express') 
, http = require("http") 
http.createServer(options, function(req,res) 
{ 
    app.handle(req, res); 
}).listen(8080); 

但在快遞一個可以簡單地只是這樣做

var express = require('express'); 
var app = express(); 
app.listen(8080, function() { 
    console.log('Listening on ' + 8080);}); 

什麼是兩者的區別?難道他們都完成了同樣的事情。如果不是使用第一種方法的區別和優勢。應該堅持第一種方法,因爲這是一個很好的編程習慣。這是我的疑問,因爲我只是想清楚瞭解是否有任何區別。

+0

@ jfriend00對不起,錯字混淆和更新。謝謝。 – user3497437

+0

@ jfriend00這就是我的想法,但我見過的例子,他們結合了兩個 – user3497437

回答

7

爲什麼用快遞模塊

結合HTTP模塊確實沒有理由使用http模塊來創建自己的HTTP服務器。 Express只會爲你做app.listen()就好,並且可以節省你一些打字的時間。

如果您要創建https服務器,則需要使用https模塊並將安全憑證傳遞給https.createServer(...)以創建正確配置的服務器。 Express無法自動爲您創建正確配置的https服務器。


如果你看看Express code in GitHub for app.listen(),就說明這一點:

app.listen = function listen() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 

所以,真的沒有區別(除了少打字等),當您使用app.listen()或創建自己的HTTP服務器和然後使用app作爲該服務器的偵聽器。


所以,這兩個代碼片段在功能上是相同的:

var app = require('express')(); 
app.listen(8080); 

app.get('/', function(req, res) { 
    res.send("hello");  
}); 

上面的代碼在功能上等同於:

var http = require('http'); 
var app = require('express')(); 
http.createServer(app).listen(8080); 

app.get('/', function(req, res) { 
    res.send("hello");  
}); 

當然,如果你想設置啓動https服務器或爲.createServer()方法添加自定義選項,然後您將首先設置您自己的服務器,然後將app作爲偵聽器。 app.listen(...)只是默認http.createServer()正常工作時的快捷方式。

+0

所以它更多的定製 – user3497437

+0

@ user3497437 - 我添加更多的我的答案向你展示兩個功能相同的例子。如果您在創建服務器時需要傳遞自定義選項,通常只需要使用'http.createServer()'。 – jfriend00

+0

感謝您的澄清 – user3497437

相關問題