Node — 第二天

http模塊

搭建服務器的步驟

① 導入 http 模塊

② 創建 web 服務器實例

③ 為服務器實例綁定 request 事件,監聽客戶端的請求

④ 啟動服務器

// ① 導入 http 模塊
const http = require('http');// ② 創建 web 服務器實例
const server = http.createServer();// ③ 為服務器實例綁定 request 事件,監聽客戶端的請求
// server.on('事件名稱', 處理函數);// 只要客戶端發來請求,則會觸發下面的事件
server.on('request', function () {console.log('你的請求我收到了');
});// ④ 啟動服務器 
server.listen(3000, function () {// 服務器啟動之后,會觸發這個回調函數console.log('my first web server start~');
});

測試:

  • node執行你的JS代碼
  • 打開客戶端(瀏覽器、postman),向服務器發送請求(localhost:3000)
  • 查看,代碼中的請求事件,是否觸發了,如果觸發了,表示請求成功了

使用http搭建服務器的問題

  • 代碼如果更改了,則需要重新啟動服務器,你的代碼才會生效

    • Ctrl + C , 先終止服務
    • 再次執行 node xxx.js 重新啟動服務即可
  • vscode 終端的使用問題

    在這里插入圖片描述

URL的組成

http://www.xxxx.com:3000/yyy/zzz?id=123

  • 協議
    • http
    • https
  • 主機地址(找到服務器)
    • 指向服務器的域名,(localhost 永遠指向自己的計算機)
    • 服務器的IP地址 (127.0.0.1 永遠指向自己的計算機)
  • 端口
    • 作用是區分服務器上的每個服務的
    • 可以通過 netstat -an 查看已經被占用的端口
  • 文件路徑部分(/api/getbooks index.html /a/b/c/xxx.html)
  • 查詢字符串部分(GET請求的參數)

獲取請求相關的信息

server.on('request',  function (req) {// req 對象,是根據 http.IncomingMessage類得來的對象// 通過這個對象,我們可以得到請求的相關信息req.url // 表示請求的urlreq.method // 表示請求方式req.headers // 表示請求頭
})

得到請求相關的信息之后,方便服務器做出判斷

服務器做出響應

server.on('request',  function (req, res) {// 所有和請求相關的信息,都是通過req對象獲取的// 所有和響應相關的信息,都通過res來完成。res這里是response的意思。// console.log(res instanceof http.ServerResponse); // true// res.end(); // 用于做出響應// res.setHeader(name, value); // 設置響應頭// res.statusCode // 設置響應狀態碼// res.writeHead(狀態碼, {響應頭})// 告訴瀏覽器,響應的數據是什么類型、什么編碼// res.setHeader('Content-Type', 'text/html; charset=utf-8');// res.statusCode = 404; // 隨便設置的狀態碼,實際中應該是200res.writeHead(200, {// key: value'Content-Type': 'text/html; charset=utf-8','Author': 'LaoTang', // 隨便寫的,實驗一下。值不能用中文});res.end('你好瀏覽器,你的請求我收到了,這是給你的回應');
})

GET方式的接口

  • 提供數據給客戶端(終極目標)

  • 具體的獲取書籍的接口

    • 讀取books.json里面的內容
      • fs.readFile() — 讀取的結果是json格式
      • require() — 讀取的結果是array格式
    • 把讀取的結果響應給客戶端 — 響應的結果,必須是json字符串格式
    • 遇到的問題
      • 解決跨域的問題 – 設置響應頭
      • 解決編碼的問題 – 設置響應頭

POST方式的接口

  • 接收并保存數據(終極目標)
  • 如何接收POST請求體
    • 定義空字符串,比如str
    • 注冊req的data事件,用于接收客戶端提交的數據
    • 注冊req的end事件,當完全接收到了客戶端提交的數據,會觸發這個事件
  • 保存數據
  • 做出響應
// 加載所需的模塊
const fs = require('fs');
const path = require('path');
const querystring = require('querystring');
// 搭建服務器
const http = require('http');
const server = http.createServer();
server.listen(3006, () => console.log('圖書管理案例接口服務啟動了'));server.on('request', (req, res) => {// 客戶端都會發送什么類型的請求,請求的url又是什么let method = req.method; // 獲取請求方式let url = req.url; // 獲取請求的url// 定義書籍 books.json的絕對路徑let filename = path.join(__dirname, 'books.json');// 判斷,請求的是否是獲取圖書的接口if (method === 'GET' && url === '/api/getbooks') {// 說明客戶端請求的就是獲取書籍的接口// 把所有書籍信息響應給客戶端// 讀取books.json里面的內容,把讀取的結果響應給客戶端// 讀取json文件,可以直接使用 require let data = require(filename);// console.log(data); // 得到一個數組res.writeHead(200, {'Access-Control-Allow-Origin': '*', // 解決跨域問題'Content-Type': 'application/json; charset=utf-8'});res.end(JSON.stringify({status: 200,msg: '獲取圖書成功',data: data}));} else if (method === 'POST' && url === '/api/addbook') {// 說明請求的是添加圖書的接口// console.log(111);// 1. 接收客戶端提交的數據// 1.1 定義一個空字符串,一會要把接收到的數據拼接到空字符串中let str = '';// 1.2 注冊req的data事件,用于接收客戶端提交的數據// 當接收到客戶端的提交的數據的時候,就會觸發這個事件,形參chunk就是接收到一部分數據req.on('data', (chunk) => {str += chunk;});// 1.3 注冊req的end事件,當完全接收到了客戶端的數據之后,會觸發req.on('end', () => {// console.log(str); // 完整的數據 // bookname=aaa&author=bbb&publisher=ccc// 2. 保存到 books.json中let old = require(filename); // 得到數組let newBook = querystring.parse(str);newBook.id = Date.now(); // 臨時使用時間戳當做idold.push(newBook);fs.writeFile(filename, JSON.stringify(old), (err) => {if (err) return console.log(err);// 沒有錯誤,保存成功// 3. 做出響應res.writeHead(200, {'Access-Control-Allow-Origin': '*', // 解決跨域問題'Content-Type': 'application/json; charset=utf-8'});res.end(JSON.stringify({status: 201,msg: '添加圖書成功',}));});});} else {res.end('錯誤');// 說明客戶端代碼寫錯了。客戶端請求了一個不存在的資源}
});

npm初步使用

介紹

npm(node package manager)node包管理器。

包是什么?包就是模塊。

npm這個工具,在安裝node的時候,就已經安裝到你的計算機中了。

命令行中執行: npm -v ,如果看到版本號,說明安裝成功了。

作用

npm的作用是:管理node模塊的工具。

  • 下載并安裝第三方的模塊
  • 卸載第三方模塊
  • 發布模塊
  • 刪除已發布的模塊

第三方模塊:

  • 非內置模塊,安裝完node,還不能使用的模塊,需要從網上下載安裝,才能使用的模塊
  • 第三方模塊是個人、公司、組織編寫的模塊,發布到網上,供我們使用

npm 就是一個管理(下載安裝、卸載…)第三方模塊的工具

初始化

使用npm工具之前,必須先初始化。

npm init -y
# 或
npm init
# 然后一路回車

初始化之后,會在項目目錄中生成 package.json 的文件。

什么第三方模塊

非node自帶的模塊。

是別人寫的模塊,然后發布到npm網站,我們可以使用npm工具來下載安裝別人寫的模塊。

第三方模塊,都是在node核心模塊的基礎之上,封裝了一下,實現了很多非常方便快速簡潔的方法。

目前,npm網站收錄了超過 150萬個第三方模塊。

安裝卸載項目模塊

下載安裝第三方模塊

npm install 模塊名
npm i 模塊名

卸載模塊

npm uninstall 模塊名
npm un 模塊名

關于項目模塊的說明

  • 下載安裝的模塊,存放在當前文件夾的 node_modules 文件夾中,同時還會生成一個記錄下載的文件 package-lock.json
  • 下載的模塊,在哪里可以使用
    • 在當前文件夾
    • 在當前文件夾的子文件夾
    • 在當前文件夾的子文件夾的子文件夾
  • 怎樣使用第三方模塊
    • 和使用內置模塊一樣,需要使用 require 加載模塊
    • 調用模塊提供的方法完成工作(一般好的模塊都會用使用文檔的)

演示下載安裝第三方模塊:moment

這里演示一個處理時間日期的模塊 – moment

下載安裝moment模塊

npm init -y
npm i moment

演示使用moment模塊處理時間

// 加載模塊
const moment = require('moment');console.log(moment().format('YYYY-MM-DD hh:mm:ss'));
// 官網:http://momentjs.cn

全局模塊

  • 全局安裝的模塊,不能通過 require() 加載使用。

  • 全局安裝的模塊,一般都是命令或者工具。

  • 安裝方法,在安裝模塊的命令后面,加 -g

    npm i 模塊名 -g
    # 或
    npm i -g 模塊名
    
  • 卸載方法(也是多一個 -g

    npm un 模塊名 -g
    
  • 全局安裝的模塊,在系統盤(C盤)

    • 通過命令 npm root -g 可以查看全局安裝路徑

mac安裝過程可能出現權限問題,可以使用 sudo npm i xxx -g

全局安裝nodemon模塊

  • 安裝命令

    npm i nodemon -g
    
  • nodemon的作用:

  • 代替node命令,啟動服務的,當更改代碼之后,nodemon會自動幫我們重啟服務。

  • 運行nodemon,如果報錯如下:
    在這里插入圖片描述

  • 解決辦法是:

    • 管理員方式,打開命令行窗口
    • 執行 set-ExecutionPolicy RemoteSigned;
    • 在出現的選項中,輸入 A,回車。即可

更改鏡像源

鏡像源,就是下載安裝第三方模塊的網站。

我們下載的第三方模塊都是從國外的npm主站下載的,速度比較慢。

淘寶在國內對npm上的第三方模塊做了一個備份,也就是說,我們可以從國內下載第三方模塊。

除了淘寶之外,還有很多其他鏡像源。

簡單的更改鏡像源方法:

  • 全局安裝 nrm 的模塊
  • npm i nrm -g
    • nrm 用于管理鏡像源
  • 使用nrm
    • nrm ls 通過這個命令,可以查看可用的鏡像源
    • nrm use taobao ,切換下載模塊的網站為淘寶
      在這里插入圖片描述

注意 :如果 nrm 安裝失敗,請修改電腦的環境變量,給環境變量添加上 npm 的絕對地址,再次查詢即可

查詢版本

nrm - y

在這里插入圖片描述

使用已下nmp 代碼可以根據 package.json重新安裝node_modules中的模塊信息

npm  i

如果安裝出現錯誤:
1. 查看 npm 版本
2. 鏡像源的配置

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248007.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《學習之道》第九章不要突擊工作

靈感從天而降的時刻確實是存在的。 這樣少見的創造性突破,通常是在經歷了一番神經緊張的準備、竭盡全力的努力,甚至包括熬夜工作后才姍姍來遲。這與 數學 和 科學標準的一天學習 是大不相同的。 它更像體育運動:每隔一陣子會有一天的比賽&…

TCP/IP(五):TCP 協議詳解

上一節 中講過,TCP 協議是面向有連接的協議,它具有丟包重發和流量控制的功能,這是它區別于 UDP 協議最大的特點。本文就主要討論這兩個功能。 數據包重發 數據發送 丟包重發的前提是發送方能夠知道接收方是否成功的接收了消息。所以&#…

nodeJS — 學習的筆記

Node介紹 為什么要學習Node.js 企業需求 具有服務端開發經驗更改front-endback-end全棧開發工程師基本的網站開發能力 服務端前端運維部署 多人社區 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MVqHkEIo-1588084625862)(C:\Users\A\AppData\R…

TCP/IP(六):HTTP 與 HTTPS 簡介

本文是準備面試過程中網絡部分總結整理的最后一篇文章,主要介紹以下知識: HTTP 協議概述POST 請求和 GET 請求Cookie 和 Session數據傳輸時的加密HTTPS 簡介 HTTP 協議 在 OSI 七層模型中,HTTP 協議位于最頂層的應用層中。通過瀏覽器訪問網…

Node — 第三天

模塊化 什么是模塊化 模塊化是指解決一個復雜問題時,自頂向下逐層把系統劃分成若干模塊的過程。 對于整個系統來說,模塊是可組合、分解和更換的單元。 生活中的模塊化 編程中的模塊化 編程領域中的模塊化,就是遵守固定的規則,…

FireDAC 中文字段過濾問題

當使用 FireDAC Filter 過濾數據的時候,通常這樣寫: FDMemTable.Filtered : False; FDMemTable1.Filter : 姓名 string(edtFilter.Text).QuotedString; FDMemTable.Filtered : True; 將會報錯:[FireDAC][Stan][Eval]-107. Invalid characte…

UIScrollViewDelegate-代理API詳解

在iOS編程中,經常用到UIScrollView控件。自然也會用到UIScrollViewDelegate協議。 今天就抽空,研究了一下UIScrollViewDelegate中所有的委托方法。 僅做Mark!如有,錯誤之處,歡迎留言指正,交流!貼…

License for package Android SDK Build-Tools 28.0.2 not accepted.(MAC)

https://blog.csdn.net/user11223344abc/article/details/83997907轉載于:https://www.cnblogs.com/dtdxrk/p/10812469.html

Express — 使用步驟

Express Express 介紹安裝搭建服務器的步驟express提供的新方法GET接口 獲取GET中的請求參數 POST接口 獲取POST請求提交的數據 中間件原理中間件語法中間件初體驗(設置響應頭)中間件開放靜態資源中間件接收POST請求體中間件返回404頁面 express 介紹 E…

大模型工具_Langchain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat 原Langchain-ChatGLM 1 功能 整體功能,想解決什么問題 基于 Langchain 與 ChatGLM 等LLM模型,搭建一套針對中文場景與開源模型,界面友好、可離線運行的知識庫問答解決方案。 當前解決…

iOS 鍵盤風格詳解UIKeyboardType

一、鍵盤風格 UIKit框架支持8種風格鍵盤。 [java] view plaincopy print?typedef enum { UIKeyboardTypeDefault, // 默認鍵盤:支持所有字符 UIKeyboardTypeASCIICapable, // 支持ASCII的默認鍵盤 UIKeyboardTypeNu…

MySQL Hardware--FIO壓測

FIO參數 filename/export/1.txt 支持文件系統或者裸設備,-filename/dev/sda2或-filename/dev/sdb direct1 測試過程繞過機器自帶的buffer,使測試結果更真實 rwrandwread 測試隨機讀的I/O rwrandwrite 測試隨機…

Node — 第四天(Promise與路由)

Promise - ES6新對象 Promise能夠處理異步程序。 回調地獄 JS中或node中,都大量的使用了回調函數進行異步操作,而異步操作什么時候返回結果是不可控的,如果我們希望幾個異步請求按照順序來執行,那么就需要將這些異步操作嵌套起來…

xcode8 升級后注釋快捷鍵不能使用的解決方法

一種說法: 這個是因為蘋果解決xcode ghost。把插件屏蔽了。解決方法 命令運行: sudo /usr/libexec/xpccachectl 然后必須重啟電腦后生效 還有一種說法:不用指令直接重啟就可以了。

winform datagridview控件使用

最近做項目時&#xff0c;顯示查詢結果總需要綁定到datagridview控件上顯示&#xff0c;總結了給datagridview綁定數據的方式&#xff0c;以及導出datagridview數據到excel表格&#xff0c;如有錯誤請多指教 1.直接綁定數據源&#xff0c;可以綁定的數據格式有List<T>,Da…

Node — 第五天

1. MySQL數據庫 phpstudy 數據庫服務器及圖形化軟件 軟件鏈接 鏈接&#xff1a;https://pan.baidu.com/s/1F8wdoMstHAJkINfDKDejsw 提取碼&#xff1a;xl3k 數據庫對于我們前端同學來說&#xff0c;就是一個了解。 對于不會變化的數據&#xff08;省、市、縣&#xff09;&…

iOS10 權限訪問崩潰

手機升級了 iOS10 Beta&#xff0c;然后用正在開發的項目 裝了個ipa包&#xff0c;發現點擊有關 權限訪問 直接Crash了&#xff0c;并在控制臺輸出了一些信息&#xff1a; This app has crashed because it attempted to access privacy-sensitive data without a usage descr…

Node — 第六天(前后端分離)及(身份驗證)

綜合應用服務端知識點搭建項目 下載安裝所需的第三方模塊 npm init -y npm i express cors mysql # express 用于搭建服務器 # cors 用于解決跨域 # mysql 用于操作數據庫# 后面用到什么&#xff0c;再下載創建app.js 之前&#xff0c;我們開啟一個服務器&#xff0c;js文件…

繼承上機作業

1、實現如下類之間的繼承關系&#xff0c;并編寫Music類來測試這些類 2、編寫一個Java應用程序&#xff0c;該程序包括3個類&#xff1a;Monkey類、People類和主類E。要求&#xff1a; (1) Monkey類中有個構造方法&#xff1a;Monkey (String s)&#xff0c;并且有個public voi…

ApplePay集成教程

Apple Pay運行環境&#xff1a;iPhone6以上設備&#xff0c;操作系統最低iOS9.0以上&#xff0c;部分信息設置需要iOS9.2以上。目前還不支持企業證書添加。 環境搭建好后可以在模擬器上面運行&#xff0c;xcode7.2.1iPhone6SP9.2系統下&#xff0c;系統會綁定幾種虛擬的銀行卡…