首先需要的Node 模塊有 http,url,path,fs 模塊。
```
// 提供一個(gè)http 服務(wù)
var http = require('http');
// 用于處理 url 字符串和 url對(duì)象
var url = require('url');
// 用于處理文件路徑
var path = require('path');
// fs 模塊? 用于讀取文件的
var fs = require('fs');
```
然后要用 http模塊來(lái)創(chuàng)建一個(gè)http模塊。
```
http.createServer(function(request,response){
? //
})
```
當(dāng)一個(gè)http 請(qǐng)求過(guò)來(lái)的時(shí)候,需要解析request.url 字段,利用url.parse()將request.url 字符串轉(zhuǎn)義成url 對(duì)象。
```
var pathName = url.parse(request.url).pathname;
```
這里假設(shè)的是把js文件所在的目錄作為靜態(tài)服務(wù)器的地址。
```
var realName = path.join('.', pathName);
```
然獲取到請(qǐng)求資源的文件類(lèi)型
```
var ext = path.extname(pathName);
ext = ext ? ext.slice(1) : 'unknown';
```
然后判斷文件是否存在,如果存在,則返回文件,否者返回404
```
// 判斷文件是否存在。
fs.exists(realName, function (exists) {
})
```
如果不存在
```
if (!exists) {
? response.writeHead(404, {'Context-type' : 'text/plain'});
? response.write('this request url' + pathName + ' was not found on this server.');
? response.end();
}
```
如果文件存在,則讀取文件的二進(jìn)制流
```
var requestType = {
? ? "css" : "text/css",
? ? "js" : "text/javascript",
? ? "html":"text/html"
};
fs.readFile(realName, 'binary', function (err, file) {
? ? if (err) {
? ? ? ? response.writeHead(500, {'Context-type' : 'text/plain'});
? ? ? response.end(err);
? ? }
? ? else {
? ? ? ? ? var contentType = requestType[ext] || "text/plain";
? ? ? ? ? response.writeHead(200, {'Context-type' : contentType});
? ? ? ? ? response.write(file, 'binary');
? ? ? ? ? response.end();
? ? }
});
```
這樣,一個(gè)簡(jiǎn)單的HTTP 靜態(tài)資源服務(wù)器就寫(xiě)好了。
貼上項(xiàng)目地址:https://github.com/bosscheng/simple-http-server