您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Node.js搭建Web服務器”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么使用Node.js搭建Web服務器”文章能幫助大家解決問題。
var http = require("http");
接下來我們使用 http.createServer() 方法創建服務器,并使用 listen 方法綁定 8888 端口。函數通過 request, response 參數來接收和響應數據。
//1.引入 http 模塊 var http=require('http'); //2.用 http 模塊創建服務 http.createServer(function(req,res){ // 發送 HTTP 頭部 // HTTP 狀態值: 200 : OK //設置 HTTP 頭部,狀態碼是 200,文件類型是 html,字符集是 utf-8 res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}); res.write('你好 nodejs'); res.write('我是第一個 nodejs 程序'); res.end(); /*結束響應*/ }).listen(8001);
Web 服務器一般指網站服務器,是指駐留于因特網上某種類型計算機的程序,可以向瀏覽器等 Web 客戶端提供文檔, 也可以放置網站文件,讓全世界瀏覽;可以放置數據文件,讓全世界下載。目前最主流的三個 Web 服務器是 Apache 、 Nginx 、IIS。
啟動
node start
功能
* 能顯示以 `.html/.htm` 結尾的 Web 頁面
* 能直接打開以 `.js/.css/.json/.text` 結尾的文件內容
* 顯示圖片資源
* 自動下載以 `.apk/.docx/.zip` 結尾的文件
* 形如 `http://xxx.com/a/b/` , 則查找b目錄下是否有 `index.html`,如果有就顯示,如果沒有就列出該目錄下的所有文件及文件夾,并可以進一步訪問。
* 形如 `http://xxx.com/a/b`, 則作301重定向到 `http://xxx.com/a/b/` , 這樣可以解決內部資源引用錯位的問題。
HttpServer.js
module.exports = (function () { "use strict"; console.time('[HttpServer][Start]'); //http協議模塊 var http = require('http'); //url解析模塊 var url = require('url'); //文件系統模塊 var fs = require("fs"); //路徑解析模塊 var path = require("path"); return { //啟動服務 start: function () { var port = this.config.port; var ip = this.config.ip; //創建一個服務 var httpServer = http.createServer(this.processRequest.bind(this)); //在指定的端口監聽服務 httpServer.listen(port, function () { console.log("[HttpServer][Start]", "runing at http://" + ip + ":" + port + "/"); console.timeEnd("[HttpServer][Start]"); }); httpServer.on("error", function (error) { console.error(error); }); }, /** * 請求處理 * @param request * @param response */ processRequest: function (request, response) { var hasExt = true; var requestUrl = request.url; var pathName = url.parse(requestUrl).pathname; //對請求的路徑進行解碼,防止中文亂碼 pathName = decodeURI(pathName); //如果路徑中沒有擴展名 if ((pathName) === '') { //如果不是以/結尾的,加/并作301重定向 if (pathName.charAt(pathName.length - 1) != "/") { pathName += "/"; var redirect = "http://" + request.headers.host + pathName; response.writeHead(301, { location: redirect }); response.end(); return; //fix bug: 執行301重定向后應終止后續流程,以防 "write after end" 異常 } //添加默認的訪問頁面,但這個頁面不一定存在,后面會處理 pathName += "index.html"; hasExt = false; //標記默認頁面是程序自動添加的 } //獲取資源文件的相對路徑 var filePath = path.join("http/webroot", pathName); //獲取對應文件的文檔類型 var contentType = this.getContentType(filePath); //如果文件名存在 fs.exists(filePath, function (exists) { if (exists) { response.writeHead(200, {"content-type": contentType}); var stream = fs.createReadStream(filePath, {flags: "r", encoding: null}); stream.on("error", function () { response.writeHead(500, {"content-type": "text/html"}); response.end("<h2>500 Server Error</h2>"); }); //返回文件內容 stream.pipe(response); } else { //文件名不存在的情況 if (hasExt) { //如果這個文件不是程序自動添加的,直接返回404 response.writeHead(404, {"content-type": "text/html"}); response.end("<h2>404 Not Found</h2>"); } else { //如果文件是程序自動添加的且不存在,則表示用戶希望訪問的是該目錄下的文件列表 var html = "<head><meta charset='utf-8'></head>"; try { //用戶訪問目錄 var filedir = filePath.substring(0, filePath.lastIndexOf('\\')); //獲取用戶訪問路徑下的文件列表 var files = fs.readdirSync(filedir); //將訪問路徑下的所以文件一一列舉出來,并添加超鏈接,以便用戶進一步訪問 for (var i in files) { var filename = files[i]; html += "<div><a href='" + filename + "'>" + filename + "</a></div>"; } } catch (e) { html += "<h2>您訪問的目錄不存在</h2>" } response.writeHead(200, {"content-type": "text/html"}); response.end(html); } } }); }, /** * 獲取文檔的內容類型 * @param filePath * @returns {*} */ getContentType: function (filePath) { var contentType = this.config.mime; var ext = path.extname(filePath).substr(1); if (contentType.hasOwnProperty(ext)) { return contentType[ext]; } else { return contentType.default; } }, ///配置信息 config: { port: 8888, ip: '127.0.0.1', mime: { html: "text/html", js: "text/javascript", css: "text/css", gif: "image/gif", jpg: "image/jpeg", png: "image/png", ico: "image/icon", txt: "text/plain", json: "application/json", default: "application/octet-stream" } } } })();
start.js
var http = require('./http/HttpServer'); http.start();
關于“怎么使用Node.js搭建Web服務器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。