菜鳥小白使用node.js搭建簡單伺服器(可請求圖片,html,js,css,json等檔案)
阿新 • • 發佈:2018-12-23
使用node.js搭建簡單伺服器
前言:以下步驟在安裝好node的環境前提下進行,未安裝者請先安裝好node,再嘗試
注:如若以下程式碼存在錯誤,歡迎讀者指出
搭建步驟如下:
一、建立server.js(主要用於搭建伺服器的檔案)
const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');
var mime = require('./mime'); // 載入我們的mime.js
var config = require ('./config');
const server = http.createServer(function(req,res){
var pathName = url.parse(req.url).pathname; // 獲取檔名"/xxx"
// 對中文進行解碼,防止亂碼
pathName = decodeURI(pathName);
// 獲取資源的絕對路徑
var realFilePath = path.resolve(__dirname+ pathName);
console.log(realFilePath);
// 獲取對應檔案的文件型別
var ext = path.extname(pathName); // 獲取字尾名,如'.html'
ext = ext?ext.slice(1): 'notKnow'; // 取掉.符號
//通過和mine.js裡面設定好的正則進行匹配,判斷當前請求的圖片是否為圖片
if (ext.match(config.Expires.fileMatch)) {
var expires = new Date();
expires.setTime(expires.getTime() + config.Expires.maxAge * 1000 );
// 設定響應頭
res.setHeader("Expires", expires.toUTCString());
res.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
}
// 定義未知文件的型別MIME
var contentType = mime[ext] || "text/plain"; // 字尾名存在就進行對映,不存在就是'text/plain'
//從檔案系統中都去請求的檔案內容
fs.readFile(pathName.substr(1),function(err, data) {
if(err) {
console.log(err);
//HTTP 狀態碼 404 : NOT FOUND
//Content Type:text/plain
res.writeHead(404,{'Content-Type': contentType});
}
else {
//HTTP 狀態碼 200 : OK
//Content Type:text/plain
res.writeHead(200,{'Content-Type': contentType});
var content = fs.readFileSync(realFilePath,"binary"); //解釋圖片時,格式必須為 binary 否則會出錯
//寫會相應內容
res.write(content,"binary"); //解釋圖片時,格式必須為 binary,否則會出錯
}
//傳送響應資料
res.end();
});
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');
二、相關require檔案
1、config.js程式碼如下:
exports.Expires = {
fileMatch: /^(jpeg|gif|png|jpg)$/ig, // 這只是個例項
maxAge: 60 * 60 * 24 * 365
};
2、mime.js(儲存用到的mime型別)程式碼如下:
module.exports = {
"css": "text/css",
"gif": "image/gif",
"html": "text/html",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "text/xml"
};
三、執行
(1)通過cmd命令跳轉到對應的專案檔案目錄下,執行命令node server.js
(2) 在瀏覽器進行訪問,在url欄中輸入http://127.0.0.1:8081/index.html(資料夾下要有index.html檔案)