2017-06-06 68 views
0

據我瞭解,require('express')()不創建一個服務器,它只是捆綁的功能結合在一起。但如果是這樣,下面的代碼如何運行,而沒有服務器?什麼要求(「表達」)()做的NodeJS

const express = require('express') 
const app = express() 

app.get('/', function (req, res) { 
    res.send('Hello World!') 
}) 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

而且,如果它創建一個服務器,爲什麼我需要進口http模塊和手動創建在下面的例子中的服務器?

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

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

io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

我很困惑。提前致謝。

+1

第二個示例使用'http',因爲它也使用'socket.io',它需要一個'http'服務器。您可以使用快速應用程序實例化這樣的http服務器,這就是所做的事 – devnull69

+0

第一個示例不需要http服務器嗎? – SKG

+0

它從一個快速應用程序創建一個HTTP協議服務器,但它不使用'http'模塊中的'Server'作爲它,而第二個例子確實(並且需要) – devnull69

回答

3

require('express')()創建Express應用程序的一個實例。

這是短此:

var express = require('express'); 
var app  = express(); 

你並不需要明確地使用http,如果你想創建一個HTTP服務器,因爲快遞會爲你創建一個,如果你打電話app.listen()

如果你需要別的東西的服務器,例如,附上socket.io實例,您可以使用此:

var express = require('express'); 
var app  = express(); 
var server = app.listen(3000, ...); // returns an `http.Server` instance 
var io  = require('socket.io')(server); 
+0

謝謝。這是否消除了socket.io的http需求? – SKG

+0

@SKG它消除了'http'的_explicit_使用,是的。 Express在內部調用'http.createServer()'來創建服務器。 – robertklep

0

基本上當你這樣做require('express'),它導入功能。以下()也會調用該函數。基本上它實例化一個快速應用程序。