nodejs中的http模塊與npm模塊使用

http模塊

創建服務器基本步驟

//1. 導入http模塊,http模塊是node的核心模塊,作用是用來創建http服務器的。
var http = require("http");
 
//2. 創建服務器
var server = http.createServer();
 
//3. 服務器處理請求
server.on("request", function() {
  console.log("我接收到請求瞭");
});
 
//4. 啟動服務器,監聽某個端口
server.listen(9999, function(){
  console.log("服務器啟動成功瞭, 請訪問: http://localhost:9999");
});

詳細說明

  • 給服務器註冊request事件,隻要服務器接收到瞭客戶端的請求,就會觸發request事件
  • request事件有兩個參數,request表示請求對象,可以獲取所有與請求相關的信息,response是響應對象,可以獲取所有與響應相關的信息。
  • 服務器監聽的端口范圍為:1-65535之間,推薦使用3000以上的端口,因為3000以下的端口一般留給系統使用

request對象詳解

文檔地址:http://nodejs.cn/api/http.html#http_message_headers

常見屬性:

  • headers: 所有的請求頭信息
  • method: 請求的方式
  • url: 請求的地址

註意:在發送請求的時候,可能會出現兩次請求的情況,這是因為谷歌瀏覽器會自動增加一個favicon.ico的請求。

小結:request對象中,常用的就是method和url兩個參數

response對象詳解

文檔地址:http://nodejs.cn/api/http.html#http_class_http_serverresponse

常見的屬性和方法:

  • res.write(data): 給瀏覽器發送請求體,可以調用多次,從而提供連續的請求體
  • res.end();   通知服務器,所有響應頭和響應主體都已被發送,即服務器將其視為已完成。
  • res.end(data); 結束請求,並且響應一段內容,相當於res.write(data) + res.end()
  • res.statusCode: 響應的的狀態碼 200 404 500
  • res.statusMessage: 響應的狀態信息, OK Not Found ,會根據statusCode自動設置。
  • res.setHeader(name, value); 設置響應頭信息, 比如content-type
  • res.writeHead(statusCode, statusMessage, options); 設置響應頭,同時可以設置狀態碼和狀態信息。

註意:必須先設置響應頭,才能設置響應。

實現靜態WEB服務器

服務器響應首頁

註意:瀏覽器中輸入的URL地址,僅僅是一個標識,不與服務器中的目錄一致。也就是說:返回什麼內容是由服務端的邏輯決定

server.on('request', function(req, res) {
  var url = req.url
  if(url === '/') {
    fs.readFile('./index.html', function(err, data) {
      if(err) {
        return res.end('您訪問的資源不存在~')
      }
 
      res.end(data)
    })
  }
})

根據根據不同url,響應不同文件

content-type設置-MIME類型

  • MIME(Multipurpose Internet Mail Extensions)多用途Internet郵件擴展類型 是一種表示文檔性質和格式的標準化方式
  • 瀏覽器通常使用MIME類型(而不是文件擴展名)來確定如何處理文檔;因此服務器將正確的MIME類型附加到響應對象的頭部是非常重要的
  • MIME 類型

靜態資源的通用處理

MIME類型的通用處理-mime模塊

  • 作用:獲取文件的MIME類型
  • 安裝:npm i mime

引入mime:

var mime = require('mime')
 
// 獲取路徑對應的MIME類型
mime.getType('txt')                    // ⇨ 'text/plain'
// 根據MIME獲取到文件後綴名
mime.getExtension('text/plain')        // ⇨ 'txt'
const http = require('http')
const fs = require('fs')
const path = require('path')
const mime = require('mime')
http.createServer((req, res) => {
    // 隻需要判斷 url是否以 /www開始
    const url = req.url
 
    if (url.startsWith('/www')) {
      // 直接讀取文件
      const filePath = path.join(__dirname, url)
      fs.readFile(filePath, (err, data) => {
        if (err) {
          // 響應404
          res.statusCode = 404
          res.end('404')
        } else {
          // 設置mime類型
          res.setHeader('content-type', mime.getType(url))
          // 響應數據
          res.end(data)
        }
      })
    } else {
      res.statusCode = 404
      res.end('404')
    }
  })
  .listen(9999, () => {
    console.log('服務器啟動成功瞭')
  })

npm – Node包管理工具

npm的基本概念

  • node package manager
  • npm官網
  • npm中文文檔

1. npm 是node的包管理工具,

2. 它是世界上最大的軟件註冊表,每星期大約有 30 億次的下載量,包含超過 600000 個 包(package) (即,代碼模塊)。

3. 來自各大洲的開源軟件開發者使用 npm 互相分享和借鑒。包的結構使您能夠輕松跟蹤依賴項和版本。

  • 作用:通過npm來快速安裝開發中使用的包
  • npm不需要安裝,隻要安裝瞭node,就自帶瞭npm

npm基本使用

初始化包

npm init;    //這個命令用於初始化一個包,創建一個package.json文件,我們的項目都應該先執行npm init
npm init -y;  //快速的初始化一個包, 不能是一個中文名

安裝包

npm install 包名;  //安裝指定的包名的最新版本到項目中
npm install 包名@版本號;  //安裝指定包的指定版本
npm i 包名; //簡寫

卸載包

npm uninstall 包名;  //卸載已經安裝的包

清除緩存

npm cache clean -f // 如果npm安裝失敗瞭,可以用這個命令來清除緩存

package.json文件

package.json文件,包(項目)描述文件,用來管理組織一個包(項目),它是一個純JSON格式的。

  • 作用:描述當前項目(包)的信息,描述當前包(項目)的依賴項
  • 如何生成:npm init或者npm init -y
  • 作用

作為一個標準的包,必須要有package.json文件進行描述

一個項目的node_modules目錄通常都會很大,不用拷貝node_modules目錄,可以通過package.json文件配合npm install直接安裝項目所有的依賴項

  • 描述內容
{
  "name": "03-npm",  //描述瞭包的名字,不能有中文
  "version": "1.0.0",  //描述瞭包的的版本信息, x.y.z  如果隻是修復bug,需要更新Z位。如果是新增瞭功能,但是向下兼容,需要更新Y位。如果有大變動,向下不兼容,需要更新X位。
  "description": "", //包的描述信息
  "main": "index.js", //入口文件(模塊化加載規則的時候詳細的講)
  "scripts": {  //配置一些腳本,在vue的時候會用到,現在體會不到
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],  //關鍵字(方便搜索)
  "author": "",  //作者的信息
  "license": "ISC",  //許可證,開源協議
  "dependencies": {   //重要,項目的依賴, 方便代碼的共享  通過 npm install可以直接安裝所有的依賴項
    "bootstrap": "^3.3.7",
    "jquery": "^3.3.1"
  }
}

註意:一個合法的package.json,必須要有name和version兩個屬性

本地安裝和全局安裝

有兩種方式用來安裝 npm 包:本地安裝和全局安裝。選用哪種方式來安裝,取決於你如何使用這個包。

全局安裝:如果你想將其作為一個命令行工具,那麼你應該將其安裝到全局。這種安裝方式後可以讓你在任何目錄下使用這個命令。比如less命令,webpack命令,hcc-md命令 。

本地安裝:如果你自己的模塊依賴於某個包,並通過 Node.js 的 require 加載,那麼你應該選擇本地安裝,這種方式也是 npm install 命令的默認行為。

// 全局安裝,會把npm包安裝到C:\Users\HUCC\AppData\Roaming\npm目錄下,作為命令行工具使用
npm install -g 包名;
//本地安裝,會把npm包安裝到當前項目的node_modules文件中,作為項目的依賴
npm install 包名;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: