最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Node.js搭建Web服務器

 更新時間:2022年06月24日 11:46:36   作者:小旭2021  
這篇文章介紹了使用Node.js搭建Web服務器的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、 Node.js 創(chuàng)建的第一個應用

1、引入http模塊

var http = require("http");

2、 創(chuàng)建服務器

接下來我們使用 http.createServer() 方法創(chuàng)建服務器,并使用 listen 方法綁定 8888 端口。函數(shù)通過 request, response 參數(shù)來接收和響應數(shù)據(jù)。

//1.引入 http 模塊
var http=require('http');
//2.用 http 模塊創(chuàng)建服務
http.createServer(function(req,res){
// 發(fā)送 HTTP 頭部
// HTTP 狀態(tài)值: 200 : OK
//設置 HTTP 頭部,狀態(tài)碼是 200,文件類型是 html,字符集是 utf-8
res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});
res.write('你好 nodejs');
res.write('我是第一個 nodejs 程序');
res.end(); /*結束響應*/
}).listen(8001);

2、 WEB 服務器介紹

Web 服務器一般指網(wǎng)站服務器,是指駐留于因特網(wǎng)上某種類型計算機的程序,可以向瀏覽器等 Web 客戶端提供文檔, 也可以放置網(wǎng)站文件,讓全世界瀏覽;可以放置數(shù)據(jù)文件,讓全世界下載。目前最主流的三個 Web 服務器是 Apache 、 Nginx 、IIS。

3、 Nodejs 封裝一個 WEB 服務器

啟動

node start

功能

* 能顯示以 `.html/.htm` 結尾的 Web 頁面

* 能直接打開以 `.js/.css/.json/.text` 結尾的文件內(nèi)容

* 顯示圖片資源

* 自動下載以 `.apk/.docx/.zip` 結尾的文件

* 形如 `http://xxx.com/a/b/` , 則查找b目錄下是否有 `index.html`,如果有就顯示,如果沒有就列出該目錄下的所有文件及文件夾,并可以進一步訪問。

* 形如 `http://xxx.com/a/b`,  則作301重定向到 `http://xxx.com/a/b/` , 這樣可以解決內(nèi)部資源引用錯位的問題。

HttpServer.js

module.exports = (function () {
 
  "use strict";
 
  console.time('[HttpServer][Start]');
 
  //http協(xié)議模塊
  var http = require('http');
  //url解析模塊
  var url = require('url');
  //文件系統(tǒng)模塊
  var fs = require("fs");
  //路徑解析模塊
  var path = require("path");
 
  return {
    //啟動服務
    start: function () {
      var port = this.config.port;
      var ip = this.config.ip;
 
      //創(chuàng)建一個服務
      var httpServer = http.createServer(this.processRequest.bind(this));
 
      //在指定的端口監(jiān)聽服務
      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: 執(zhí)行301重定向后應終止后續(xù)流程,以防 "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("<h1>500 Server Error</h1>");
          });
          //返回文件內(nèi)容
          stream.pipe(response);
        } else { //文件名不存在的情況
          if (hasExt) {
            //如果這個文件不是程序自動添加的,直接返回404
            response.writeHead(404, {"content-type": "text/html"});
            response.end("<h1>404 Not Found</h1>");
          } 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 += "<h1>您訪問的目錄不存在</h1>"
            }
            response.writeHead(200, {"content-type": "text/html"});
            response.end(html);
          }
        }
      });
    },
 
    /**
     * 獲取文檔的內(nèi)容類型
     * @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服務器的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Node.js入門教程:在windows和Linux上安裝配置Node.js圖文教程

    Node.js入門教程:在windows和Linux上安裝配置Node.js圖文教程

    這篇文章主要介紹了Node.js入門教程:在windows和Linux上安裝配置Node.js的方法,本文圖文并茂,步驟明細,是學習安裝node.js的絕佳教程,需要的朋友可以參考下
    2014-08-08
  • nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    這篇文章主要給大家介紹了關于nvm報錯Now?using?node?v版本號(64-bit)的解決方法,文中將解決的辦法介紹的非常詳細,對遇到這個問題的朋友具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • node.js中fs.stat與fs.fstat的區(qū)別詳解

    node.js中fs.stat與fs.fstat的區(qū)別詳解

    fs.stat和fs.fstat他們都是用來獲取文件的狀態(tài)信息,下面這篇文章主要給大家介紹了關于node.js中fs.stat與fs.fstat區(qū)別的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • node 利用進程通信實現(xiàn)Cluster共享內(nèi)存

    node 利用進程通信實現(xiàn)Cluster共享內(nèi)存

    本篇文章主要介紹了node 利用進程通信實現(xiàn)Cluster共享內(nèi)存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解Nodejs mongoose

    詳解Nodejs mongoose

    Mongoose 是在nodejs環(huán)境下,對mongodb進行便捷操作的對象模型工具。本文介紹解(翻)密(譯)Mongoose插件。這篇文章給大家詳細介紹了Nodejs mongoose 的相關知識,感興趣的朋友一起看看吧
    2018-06-06
  • Node.js Buffer模塊功能及常用方法實例分析

    Node.js Buffer模塊功能及常用方法實例分析

    這篇文章主要介紹了Node.js Buffer模塊功能及常用方法,結合實例形式分析了Buffer模塊的各種常用函數(shù)及相關使用技巧,需要的朋友可以參考下
    2019-01-01
  • Node.js中的require.resolve方法使用簡介

    Node.js中的require.resolve方法使用簡介

    在Node.js中,可以使用require.resolve函數(shù)來查詢某個模塊文件的帶有完整絕對路徑的文件名,下面這篇文章主要介紹了Node.js中require.resolve方法使用的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • 詳解node.js搭建代理服務器請求數(shù)據(jù)

    詳解node.js搭建代理服務器請求數(shù)據(jù)

    本篇文章主要介紹了詳解node.js搭建代理服務器請求數(shù)據(jù),具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法

    nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法

    這篇文章主要介紹了nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Node.js應用設置安全的沙箱環(huán)境

    Node.js應用設置安全的沙箱環(huán)境

    這篇文章主要介紹了Node.js應用設置安全的沙箱環(huán)境的方法以及注意事項,對此有需要的朋友可以參考學習下。
    2018-04-04

最新評論

山阴县| 汉中市| 耿马| 界首市| 福州市| 嵊州市| 乌兰浩特市| 郎溪县| 尉氏县| 赣州市| 霍州市| 白水县| 万州区| 奉化市| 石城县| 津南区| 黄龙县| 禹城市| 任丘市| 克拉玛依市| 尉犁县| 平原县| 奇台县| 崇阳县| 游戏| 赤壁市| 大名县| 上林县| 诸暨市| 乌苏市| 垦利县| 宿迁市| 三穗县| 安新县| 仙居县| 英德市| 乌恰县| 苏尼特右旗| 商丘市| 长寿区| 伊宁县|