nodeJS從入門到進階二(網路部分)

来源:https://www.cnblogs.com/sgs123/archive/2019/08/30/11435562.html
-Advertisement-
Play Games

一、網路伺服器 1、http狀態碼 1xx: 表示普通請求,沒有特殊含義 2xx:請求成功 + 200:請求成功 3xx:表示重定向 + 301 永久重定向 + 302 臨時重定向 + 303 使用緩存(伺服器沒有更新過) 4xx:無法訪問 + 403:無法訪問 + 404:資源找不到 5xx:服務 ...


一、網路伺服器

1、http狀態碼

1xx: 表示普通請求,沒有特殊含義

2xx:請求成功

  • 200:請求成功

3xx:表示重定向

  • 301 永久重定向
  • 302 臨時重定向
  • 303 使用緩存(伺服器沒有更新過)

4xx:無法訪問

  • 403:無法訪問
  • 404:資源找不到

5xx:伺服器有錯

  • 500:伺服器代碼有錯
  • 502:網關或代理伺服器出錯
  • 503:伺服器已崩潰

狀態碼使用

res.writeHead('狀態碼','響應頭對象')

2、響應頭

響應頭:

  • Content-Type:響應的文件類型(MIME類型)
    • 註意:未指定響應文件內容是,預設是html;編碼格式預設是系統編碼
  • Content-Length: 響應內容的長度 (數字)
  • Access-Control-Allow-Oragin:"*" //設置跨域

設置響應頭

{
    'Content-Type':'text/html;charset=utf-8'
}

3、MIME類型:

什麼是MIME類型?

  • Multipurpose Internet Mail Extensions多用途互聯網郵件擴展類型
  • 可以認為是文件類型的表述

常用的MIME類型有哪些?

  • .txt-------------text/plain
  • .html-------------text/html
  • .css-------------text/css
  • .js-------------text/javascript
  • .png-------------image/png
  • .jpg-------------image/jpeg
  • .gif-------------image/gif
  • .json-------------text/json 以前 application/json
  • .xml-------------text/xml
  • .pdf-------------application/pdf
  • .zip-------------application/x-gzif
  • .mp3-------------audio/mpeg
  • .mp4-------------video/mpeg

4、製作靜態網頁伺服器

使用nodeJS搭建一個最基本的伺服器

var http = require('http');
var path = require('path');
var server = http.creareServer();
server.on('request',function(req,res){
    //配置訪問不同的url
    if(req.url==='/'){
        //根據請求文件的尾碼通過path模塊得到,可以設置不同的MIME類型  
        res.writeHead(200,{
            "content-Type":"text/html;charset=utf-8;" 
        })
        res.write('<h1>響應內容<h2>')
        res.end();
    }
})
server.listen(80,function(){
    console.log('server is running.....');
})

5、接收get和post方式的傳值

get方式客戶端同過url傳值

  • nodeJS接收使用req.url取值

post方式客戶端通過表單傳值

  • nodeJS接收使用獲取流的方式取值
req.on('data',(a)=>{
    //定義傳過來的數據
    let query ='';
    query+=a;
})
req.on('end',()=>{
    //完成
    res.write('<h1>傳遞的參數為:'+query+'</h1>');
    res.end();
})

二、express框架

1、express介紹

express是一個基於node.js 的極簡、靈活的web應用開發框架,可以實現強大的web伺服器功能

Express 框架核心特性:

  • 可以設置中間件響應或過濾http請求
  • 可以使用路由實現動態網頁,響應不同的http請求
  • 內置支持ejs模板(預設是jade模板),實現模板渲染生成html

express-generator生成器

  • 是express官方團隊為開發者準備的一個快速生成工具,可以快速的生成一個基本的express開發

2、express安裝

安裝express-generator生成器

  • cnpm i -g express-generator //安裝完成後可以使用express命令
  • express -e 項目名稱 //創建項目 (e表示使用ejs模板)
  • express -e //手動創建項目
  • cnpm i //安裝依賴
  • 啟動項目
    • node app //需要手動添加監聽埠的代碼
    • npm start //自動查找node ./bin/www
    • node ./bin/www //開啟項目
  • localhost:3000 //測試項目

安裝nodemon插件

由於項目每次修改內容,需要重新啟動項目,非常麻煩,藉助第三方模塊實現不用重啟也能自動更新的效果

  • npm i -g nodemon //安裝到全局
  • npm i -D nodemon //安裝到當前項目
  • 使用:把node 替換為 nodemon 執行js文件

目錄說明

  • bin 可執行文件目錄
  • node_modules 依賴包目錄
  • public 靜態文件根目錄
    • 所有金泰文件都放在這個目錄下html,css,js,圖片,字體,視屏等資源
  • routes 路由模塊目錄,動態文件的目錄
    • 優先找靜態文件,如果沒有靜態存在則找動態路由,如果沒有,就404(根據app.js中間件條用順序而來)
  • views 視圖目錄,用來存放所有ejs模板

文件

  • app.js 項目的主文件,對整個項目的所有資源進行統籌的安排
  • package.json 項目的描述文件,聲明項目名稱,版本,依賴等

3、express路由(重要)

  • 接收用戶請求,處理用戶數據,返回結果給用戶的一套程式,可以理解為生成動態網頁的程式
  • 後端路由的核心:URL

express的路由

express對象自帶有一個Router類,可以實例化出路由對象,可以在改對象上掛載非常多的路由節點,寫法如下:

創建一個獨立的路由模塊

  • 需求:創建一個vip路由模塊,接收vip目錄下的所有需求,響應數據
    • 1)在routes目錄下創建一個vip.js的路由模塊
    • 2)編寫路由模塊代碼
    var express = require('express'); //引入express模塊
    var router = express.Router();//實例化路由對象
    
    //編寫路由掛在到路由對象上
    router.get('/list.html',function(req,res){
        res.send('數據');
    })
    
    module.exports = router; //暴露路由對象
    • 3)將編寫好的路由模塊引入到主模塊app.js中,由主模塊分配對應的請求到該模塊去處理
    var vip = require("./routes/vip.js");//引入vip路由模塊
    app.use("/vip",vip);//分配vip目錄下的請求給vip路由去處理

路由的區分

  • 大路由(總路由):app.js 負責接所有請求,對請求進行分配
  • 小路由(分路由):/routes下麵的所有路由模塊,只負責處理自己管理的目錄下的請求

4、express響應對象(res)

  • 響應對象是伺服器向客戶端響應數據的對象,包含了所有要響應的內容

響應對象的方法

  • res.send();//【重點】返回任意類型的數據給客戶端,有以下註意事項:
    • 如果返回一個數字,會當成是狀態碼,會報錯
    • send方法只能出現一次,重覆無效,並且會報錯
  • 設置狀態碼並返回內容,支持鏈式調用
res.status(200).send('任意內容')
  • res.json(); //返回JSON數據,自動設置響應頭
  • res.render(); //【重點】模板渲染,自動拼接數據,發給瀏覽器
res.render('模板名稱','模板數據')
  • res.redirect('目標');重定向,可以實現跳轉
  • res.set(); //【重點】設置響應頭

5、express請求對象(req)

客戶端向服務端發送數據的對象,包含請求頭和請求體

接收get方式的傳值

  • 語法:req.query.參數名

接收post方式的傳值

  • 語法:req.body.參數名

匹配URL網址上的數據(匹配模式)

  • 在接請求的地方去匹配,在通過語法進行接收,實現偽靜態
  • 語法:req.params.參數名

6、中間件

什麼是中間件?

是一個函數,位於客戶端和路由之間,可以訪問請求對象和響應對象,也可以調起下一個中間件

自定義中間件

app.use(function(request, response, next) {
    // 對request和response作出相應操作
    // 操作完畢後返回next()即可轉入下個中間件
    next();
})

偽函數 next()

  • 如果中間件不調用next()函數,整個請求響應流程中止,不在向後執行
  • 調用函數相當於調用下一個中間件,執行完以後自己的函數繼續執行

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 遞歸: 所謂遞歸,就是既有傳遞,又有回歸,與其說是傳遞與回歸,初學不如理解是一種 “循序遞進”與“規律約束”。 為什麼這樣說,因為遞歸演算法相比較於迴圈在代碼結構方面個人認為更加簡潔清晰,清晰易懂,遞歸註重的是一種有序的規律,所以在每個程式開始之前,我們只要能找到一個使程式循序遞進的規律;並且在整個過 ...
  • 0830自我總結 HTML標簽嵌套規則 1.塊級元素: div、h1~h6、address、blockquote、center、dir、dl、dt、dd、fieldset、form、hr、isindex、menu、noframes、noscript、ol、p、pre、table、ul 特點:總是在新 ...
  • 博客園美化小火箭 一.代碼 二.原理 三.效果展示 ...
  • 問題在於對數據的操作,或數據類型,或數據名稱 ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"> <!-- 在組件標簽上綁定的事件都vue的自定義事件。 --> <v-xiaosh ...
  • 完成最基礎的Vue環境及新建一個vue項目。 一般來說,我們拿到一個項目需求或者得到一個需求的時候,第一件應該做的事情不是立馬坐在電腦前面去寫代碼,如果你這麼做的,好吧。。。我只能暫時認定你為一個剛上路的。 首先,用戶給你一個需求,我們先要做的是需求的分析,明白用戶需要什麼?我們當前的條件能為他創造 ...
  • 原文地址:https://www.cnblogs.com/wisewrong/p/9642264.html 一、測試模版 數組去重是一個老生常談的問題,網上流傳著有各種各樣的解法 為了測試這些解法的性能,我寫了一個測試模版,用來計算數組去重的耗時 這裡分別創建了兩個長度為 10W 和 5W 的數組 ...
  • 許多人都在提倡: “直接用原生的 JavaScript 就好了,不需要 jQuery 了”。 You might not need jQuery嘗試告訴我們,擺脫 jQuery 是一件很容易的事情。但是,它的第一個例子恰恰告訴我們用 jQuery 其實也不錯,因為我們寫了 10 行原生的 JavaS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...