一、網路伺服器 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()函數,整個請求響應流程中止,不在向後執行
- 調用函數相當於調用下一個中間件,執行完以後自己的函數繼續執行