服務(wù)端的模塊放在哪里

2018-02-24 15:25 更新

OK,就像我保證過(guò)的那樣,我們現(xiàn)在可以回到我們?nèi)绾谓M織應(yīng)用這個(gè)問(wèn)題上了。我們現(xiàn)在在?server.js?文件中有一個(gè)非?;A(chǔ)的HTTP服務(wù)器代碼,而且我提到通常我們會(huì)有一個(gè)叫?index.js?的文件去調(diào)用應(yīng)用的其他模塊(比如?server.js?中的HTTP服務(wù)器模塊)來(lái)引導(dǎo)和啟動(dòng)應(yīng)用。

我們現(xiàn)在就來(lái)談?wù)勗趺窗裺erver.js變成一個(gè)真正的Node.js模塊,使它可以被我們(還沒(méi)動(dòng)工)的?index.js?主文件使用。

也許你已經(jīng)注意到,我們已經(jīng)在代碼中使用了模塊了。像這樣:

var http = require("http");

...

http.createServer(...);

Node.js中自帶了一個(gè)叫做“http”的模塊,我們?cè)谖覀兊拇a中請(qǐng)求它并把返回值賦給一個(gè)本地變量。

這把我們的本地變量變成了一個(gè)擁有所有?http?模塊所提供的公共方法的對(duì)象。

給這種本地變量起一個(gè)和模塊名稱(chēng)一樣的名字是一種慣例,但是你也可以按照自己的喜好來(lái):

var foo = require("http");

...

foo.createServer(...);

很好,怎么使用Node.js內(nèi)部模塊已經(jīng)很清楚了。我們?cè)趺磩?chuàng)建自己的模塊,又怎么使用它呢?

等我們把?server.js?變成一個(gè)真正的模塊,你就能搞明白了。

事實(shí)上,我們不用做太多的修改。把某段代碼變成模塊意味著我們需要把我們希望提供其功能的部分?導(dǎo)出?到請(qǐng)求這個(gè)模塊的腳本。

目前,我們的HTTP服務(wù)器需要導(dǎo)出的功能非常簡(jiǎn)單,因?yàn)檎?qǐng)求服務(wù)器模塊的腳本僅僅是需要啟動(dòng)服務(wù)器而已。

我們把我們的服務(wù)器腳本放到一個(gè)叫做?start?的函數(shù)里,然后我們會(huì)導(dǎo)出這個(gè)函數(shù)。

var http = require("http");

function start()  {? function onRequest(request, response)  {
? ? console.log("Request received.");
? ? response.writeHead(200,  {"Content-Type":  "text/plain"});
? ? response.write("Hello World");
? ? response.end();? }

? http.createServer(onRequest).listen(8888);
? console.log("Server has started.");
}

exports.start = start;

這樣,我們現(xiàn)在就可以創(chuàng)建我們的主文件?index.js?并在其中啟動(dòng)我們的HTTP了,雖然服務(wù)器的代碼還在?server.js?中。

創(chuàng)建?index.js?文件并寫(xiě)入以下內(nèi)容:

var server = require("./server");

server.start();

正如你所看到的,我們可以像使用任何其他的內(nèi)置模塊一樣使用server模塊:請(qǐng)求這個(gè)文件并把它指向一個(gè)變量,其中已導(dǎo)出的函數(shù)就可以被我們使用了。

好了。我們現(xiàn)在就可以從我們的主要腳本啟動(dòng)我們的的應(yīng)用了,而它還是老樣子:

node index.js

非常好,我們現(xiàn)在可以把我們的應(yīng)用的不同部分放入不同的文件里,并且通過(guò)生成模塊的方式把它們連接到一起了。

我們?nèi)匀恢粨碛姓麄€(gè)應(yīng)用的最初部分:我們可以接收HTTP請(qǐng)求。但是我們得做點(diǎn)什么——對(duì)于不同的URL請(qǐng)求,服務(wù)器應(yīng)該有不同的反應(yīng)。

對(duì)于一個(gè)非常簡(jiǎn)單的應(yīng)用來(lái)說(shuō),你可以直接在回調(diào)函數(shù)?onRequest()?中做這件事情。不過(guò)就像我說(shuō)過(guò)的,我們應(yīng)該加入一些抽象的元素,讓我們的例子變得更有趣一點(diǎn)兒。

處理不同的HTTP請(qǐng)求在我們的代碼中是一個(gè)不同的部分,叫做“路由選擇”——那么,我們接下來(lái)就創(chuàng)造一個(gè)叫做?路由?的模塊吧。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)