Nodejs的http、url模組
阿新 • • 發佈:2018-12-18
一、http模組
1、http模組簡介
http模組是Node提供的一個系統模組,使用該模組可以讓我們根據自己的需求建立一個web伺服器並定製伺服器功能。
2、構建web伺服器步驟
① 載入http模組
const http = require('http');
② 建立伺服器例項
const server = http.createServer();
③ 開啟伺服器
引數一:監聽的埠號,0——65535
引數二:啟動成功後觸發的回撥函式
server.listen(3000, function () { console.log('Server is running'); })
前三步都是固定的套路,記住就行了。
④ 註冊伺服器功能
引數一:事件型別,request代表監聽瀏覽器請求
引數二:回撥函式。引數一:請求物件;引數二:響應對像
server.on('request', function (req, res) {
//end能夠將引數內容返回給瀏覽器
res.end('Hello Nodejs');
})
3、不同的url地址響應不同的內容
req.url內部儲存了當前請求的url地址,該地址是一個沒有域名的路徑,判斷url地址,通過不同的url地址來響應不同的內容。
const http = require('http'); const server = http.createServer(); server.listen(3000, function () { console.log('Server is running'); }) server.on('request', function (req, res) { const url = req.url; if(url === '/' || url === '/index') { res.setHeader('content-type', 'text/html;charset=utf-8'); res.end('前臺首頁'); } else if (url === '/admin/login') { res.writeHeader(200, { 'content-type': 'text/html;charset=utf-8' }) res.write('後臺登入頁'); res.end(); } else { res.writeHeader(404); res.end('404 not found'); } })
每次程式碼改變就要重啟伺服器(Ctrl+shift+c)
4、req物件
① req.url:儲存了當前請求的url地址
② req.method:儲存了當前請求的方法
③ req.headers:儲存了當前請求頭的資訊
5、res物件
① res.setHeader():設定響應頭
② res.writeHeader():設定響應狀態碼和響應頭,物件形式一次性可以設定多個響應頭
③ res.write():設定響應主體
④ res.end():將響應行、響應頭、響應體一次性返回給瀏覽器
6、http配合fs顯示頁面
//載入http模組 const http = require('http'); const fs = require('fs'); //建立伺服器例項 const server = http.createServer(); //開啟伺服器 server.listen(3000, function () { console.log('Server is running'); }) //註冊伺服器事件 server.on('request', function (req, res) { const url = req.url; //在view資料夾中新建了前臺首頁index.html,在view中新建了資料夾admin,在admin中新建了後臺登入頁面login.html if(url === '/' || url === '/index') { fs.readFile('./view/index.html', function (err,data) { if (err) { res.end('404 not found'); return console.log(err); } res.end(data); }); } else if (url === '/admin/login') { fs.readFile('./view/admin/login.html', function (err, data) { if (err) { res.end('404 not fount'); } res.end(data); }); } else { res.writeHeader(404); res.end('404 not found'); } })
7、載入靜態資源
分析url地址和要讀取檔案路徑的關係
const http = require('http');
const fs = require('fs');
const server = http.createServer();
server.listen(3000, function () {
console.log('Server is running');
})
server.on('request', function (req, res) {
const url = req.url;
if(url === '/' || url === '/index') {
fs.readFile('./view/index.html', function (err,data) {
if (err) {
res.end('404 not found');
return console.log(err);
}
res.end(data);
});
} else if (url === '/admin/login') {
fs.readFile('./view/admin/login.html', function (err, data) {
if (err) {
res.end('404 not fount');
}
res.end(data);
});
//在view中建立了public資料夾,裡面又分別建立了css、img、js三個資料夾,裡面分別有a.css,1.png,b.js,這些都是要載入的靜態資源
//為了載入靜態資源,多加的一個分支
} else if (url.startsWith('/public')) {
fs.readFile('./view' + url, function (err,data) {
if (err) {
res.end('404 not found');
return console.log(err);
}
res.end(data);
});
} else {
res.writeHeader(404);
res.end('404 not found');
}
})
二、url模組
1、url模組簡介
url也是node提供的系統模組,使用該模組能夠將get地址分解,並提取出其中的引數。
get地址: /getData?id=10001&name=zs
核心方法: parse(var1, var2);
引數1: url地址
引數2: true(get引數轉為物件) 、 false(get引數就是一個字串)
兩個屬性最重要:
pathname:當前請求的地址
query: get傳遞的引數
//1. 載入 http 模組
const http = require('http');
const url = require('url');
//2. 建立伺服器例項
const server = http.createServer();
//3. 啟動伺服器
server.listen(3000, () => {
console.log('Server is running');
})
server.on('request', (req, res) => {
const urlObj = url.parse(req.url, true);
console.log(urlObj);
})