nodejs中的http模塊與npm模塊使用
http模塊
創(chuàng)建服務(wù)器基本步驟
//1. 導(dǎo)入http模塊,http模塊是node的核心模塊,作用是用來創(chuàng)建http服務(wù)器的。 var http = require("http"); ? //2. 創(chuàng)建服務(wù)器 var server = http.createServer(); ? //3. 服務(wù)器處理請求 server.on("request", function() { ? console.log("我接收到請求了"); }); ? //4. 啟動服務(wù)器,監(jiān)聽某個端口 server.listen(9999, function(){ ? console.log("服務(wù)器啟動成功了, 請訪問: http://localhost:9999"); });
詳細(xì)說明
- 給服務(wù)器注冊request事件,只要服務(wù)器接收到了客戶端的請求,就會觸發(fā)request事件
- request事件有兩個參數(shù),request表示請求對象,可以獲取所有與請求相關(guān)的信息,response是響應(yīng)對象,可以獲取所有與響應(yīng)相關(guān)的信息。
- 服務(wù)器監(jiān)聽的端口范圍為:1-65535之間,推薦使用3000以上的端口,因為3000以下的端口一般留給系統(tǒng)使用
request對象詳解
文檔地址:http://nodejs.cn/api/http.html#http_message_headers
常見屬性:
headers
: 所有的請求頭信息method
: 請求的方式url
: 請求的地址
注意:在發(fā)送請求的時候,可能會出現(xiàn)兩次請求的情況,這是因為谷歌瀏覽器會自動增加一個favicon.ico的請求。
小結(jié):request對象中,常用的就是method和url兩個參數(shù)
response對象詳解
文檔地址:http://nodejs.cn/api/http.html#http_class_http_serverresponse
常見的屬性和方法:
res.write(data)
: 給瀏覽器發(fā)送請求體,可以調(diào)用多次,從而提供連續(xù)的請求體res.end()
; 通知服務(wù)器,所有響應(yīng)頭和響應(yīng)主體都已被發(fā)送,即服務(wù)器將其視為已完成。res.end(data)
; 結(jié)束請求,并且響應(yīng)一段內(nèi)容,相當(dāng)于res.write(data) + res.end()res.statusCode
: 響應(yīng)的的狀態(tài)碼 200 404 500res.statusMessage
: 響應(yīng)的狀態(tài)信息, OK Not Found ,會根據(jù)statusCode自動設(shè)置。res.setHeader(name, value)
; 設(shè)置響應(yīng)頭信息, 比如content-typeres.writeHead(statusCode, statusMessage, options)
; 設(shè)置響應(yīng)頭,同時可以設(shè)置狀態(tài)碼和狀態(tài)信息。
注意:必須先設(shè)置響應(yīng)頭,才能設(shè)置響應(yīng)。
實(shí)現(xiàn)靜態(tài)WEB服務(wù)器
服務(wù)器響應(yīng)首頁
注意:瀏覽器中輸入的URL地址,僅僅是一個標(biāo)識,不與服務(wù)器中的目錄一致。也就是說:返回什么內(nèi)容是由服務(wù)端的邏輯決定
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) ? ? }) ? } })
根據(jù)根據(jù)不同url,響應(yīng)不同文件
content-type設(shè)置-MIME類型
- MIME(Multipurpose Internet Mail Extensions)多用途Internet郵件擴(kuò)展類型 是一種表示文檔性質(zhì)和格式的標(biāo)準(zhǔn)化方式
- 瀏覽器通常使用MIME類型(而不是文件擴(kuò)展名)來確定如何處理文檔;因此服務(wù)器將正確的MIME類型附加到響應(yīng)對象的頭部是非常重要的
- MIME 類型
靜態(tài)資源的通用處理
MIME類型的通用處理-mime模塊
- 作用:獲取文件的MIME類型
- 安裝:npm i mime
引入mime:
var mime = require('mime') // 獲取路徑對應(yīng)的MIME類型 mime.getType('txt') // ? 'text/plain' // 根據(jù)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) { // 響應(yīng)404 res.statusCode = 404 res.end('404') } else { // 設(shè)置mime類型 res.setHeader('content-type', mime.getType(url)) // 響應(yīng)數(shù)據(jù) res.end(data) } }) } else { res.statusCode = 404 res.end('404') } }) .listen(9999, () => { console.log('服務(wù)器啟動成功了') })
npm - Node包管理工具
npm的基本概念
- node package manager
- npm官網(wǎng)
- npm中文文檔
1. npm 是node的包管理工具,
2. 它是世界上最大的軟件注冊表,每星期大約有 30 億次的下載量,包含超過 600000 個 包(package) (即,代碼模塊)。
3. 來自各大洲的開源軟件開發(fā)者使用 npm 互相分享和借鑒。包的結(jié)構(gòu)使您能夠輕松跟蹤依賴項和版本。
- 作用:通過npm來快速安裝開發(fā)中使用的包
- npm不需要安裝,只要安裝了node,就自帶了npm
npm基本使用
初始化包
npm init; ? ?//這個命令用于初始化一個包,創(chuàng)建一個package.json文件,我們的項目都應(yīng)該先執(zhí)行npm init npm init -y; ?//快速的初始化一個包, 不能是一個中文名
安裝包
npm install 包名; ?//安裝指定的包名的最新版本到項目中 npm install 包名@版本號; ?//安裝指定包的指定版本 npm i 包名; //簡寫
卸載包
npm uninstall 包名; ?//卸載已經(jīng)安裝的包
清除緩存
npm cache clean -f // 如果npm安裝失敗了,可以用這個命令來清除緩存
package.json文件
package.json文件,包(項目)描述文件,用來管理組織一個包(項目),它是一個純JSON格式的。
- 作用:描述當(dāng)前項目(包)的信息,描述當(dāng)前包(項目)的依賴項
- 如何生成:npm init或者npm init -y
- 作用
作為一個標(biāo)準(zhǔn)的包,必須要有package.json文件進(jìn)行描述
一個項目的node_modules目錄通常都會很大,不用拷貝node_modules目錄,可以通過package.json文件配合npm install直接安裝項目所有的依賴項
- 描述內(nèi)容
{ ? "name": "03-npm", ?//描述了包的名字,不能有中文 ? "version": "1.0.0", ?//描述了包的的版本信息, x.y.z ?如果只是修復(fù)bug,需要更新Z位。如果是新增了功能,但是向下兼容,需要更新Y位。如果有大變動,向下不兼容,需要更新X位。 ? "description": "", //包的描述信息 ? "main": "index.js", //入口文件(模塊化加載規(guī)則的時候詳細(xì)的講) ? "scripts": { ?//配置一些腳本,在vue的時候會用到,現(xiàn)在體會不到 ? ? "test": "echo \"Error: no test specified\" && exit 1" ? }, ? "keywords": [], ?//關(guān)鍵字(方便搜索) ? "author": "", ?//作者的信息 ? "license": "ISC", ?//許可證,開源協(xié)議 ? "dependencies": { ? //重要,項目的依賴, 方便代碼的共享 ?通過 npm install可以直接安裝所有的依賴項 ? ? "bootstrap": "^3.3.7", ? ? "jquery": "^3.3.1" ? } }
注意:一個合法的package.json,必須要有name和version兩個屬性
本地安裝和全局安裝
有兩種方式用來安裝 npm 包:本地安裝和全局安裝。選用哪種方式來安裝,取決于你如何使用這個包。
全局安裝:如果你想將其作為一個命令行工具,那么你應(yīng)該將其安裝到全局。這種安裝方式后可以讓你在任何目錄下使用這個命令。比如less命令,webpack命令,hcc-md命令 。
本地安裝:如果你自己的模塊依賴于某個包,并通過 Node.js 的 require 加載,那么你應(yīng)該選擇本地安裝,這種方式也是 npm install 命令的默認(rèn)行為。
// 全局安裝,會把npm包安裝到C:\Users\HUCC\AppData\Roaming\npm目錄下,作為命令行工具使用 npm install -g 包名; //本地安裝,會把npm包安裝到當(dāng)前項目的node_modules文件中,作為項目的依賴 npm install 包名;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用travis-ci如何持續(xù)部署node.js應(yīng)用詳解
最近在學(xué)習(xí)使用 travis-ci 對項目進(jìn)行持續(xù)集成測試,所以下面這篇文章主要給大家介紹了關(guān)于使用travis-ci如何持續(xù)部署node.js應(yīng)用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07M2實(shí)現(xiàn)Nodejs項目自動部署的方法步驟
這篇文章主要介紹了M2實(shí)現(xiàn)Nodejs項目自動部署的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05Nodejs實(shí)現(xiàn)的一個簡單udp廣播服務(wù)器、客戶端
這篇文章主要介紹了Nodejs實(shí)現(xiàn)的一個簡單udp廣播服務(wù)器、客戶端,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09node.js中的模塊化標(biāo)準(zhǔn)CommonJS與自定義模塊
這篇文章介紹了node.js中的模塊化標(biāo)準(zhǔn)CommonJS與自定義模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼
這篇文章主要介紹了NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04