簡單案例創(chuàng)建HTTP服務(wù)端:
// 導(dǎo)入 http 模塊
const http = require("http");
// 創(chuàng)建服務(wù)對象
const server = http.createServer((request, response) => {
// 設(shè)置編碼格式,解決中文亂碼問題
response.setHeader("content-type", "text/html;charset=utf-8");
// 設(shè)置響應(yīng)體
response.end("歡迎訪問!");
})
// 監(jiān)聽8090端口,啟動服務(wù)
server.listen(8090, () => {
console.log("服務(wù)已經(jīng)啟動...")
})
端口號被占用:
1.關(guān)閉當(dāng)前正在運(yùn)行監(jiān)聽端口的服務(wù)
2.修改其他的端口號
一、request 獲取請求方的相關(guān)信息
- 獲取請求方式類型
// get、post
request.method();
- 獲取請求的 url 地址
// 只包含 url 中路徑與查詢字符串
// /search?name=node&num=2
request.url
- 通過實例化 URl 對象獲取路徑與查詢字符串
// 得到 URL 對象
let url = new URL(request.url, "http://192.168.0.1:8090");
// 得到路徑 => /search
console.log(url.pathname)
// 得到 name 查詢字符串 => node
console.log(url.searchParams.get("name"))
- 獲取 http 協(xié)議的版本號
// 1.1
request.httpVersion
- 獲取 http 的請求頭
request.headers
二、response 獲取響應(yīng)方的相關(guān)信息
響應(yīng)報文組成:
1.響應(yīng)行:包含:HTTP 版本號、響應(yīng)狀態(tài)碼、響應(yīng)狀態(tài)的描述。
2.響應(yīng)頭:一些附加信息。
3.響應(yīng)體:響應(yīng)格式有HTML、CSS、JavaScript、JSON、圖片、視頻等。
- 設(shè)置響應(yīng)體內(nèi)容
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {
// 讀取文件內(nèi)容
let resHtml = fs.readFileSync(__dirname + "/index.html");
// 方式一:設(shè)置響應(yīng)體,可以多次調(diào)用
response.write(resHtml);
response.write("hello2");
response.end();
// 方式二:設(shè)置響應(yīng)體,只能調(diào)用一次
response.end(resHtml);
});
// 監(jiān)聽8090端口,啟動服務(wù)
server.listen(8090, () => {
console.log("服務(wù)已經(jīng)啟動...")
});
- 設(shè)置響應(yīng)狀態(tài)碼
response.statusCode = 200;
- 設(shè)置響應(yīng)頭
response.setHeader("content-type", "text/html;charset=utf-8");
- 響應(yīng)不同靜態(tài)資源文件
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {
// 獲取請求url路徑
let { pathname } = new URL(request.url, "http://192.168.0.1:8090");
// 拼接資源文件路徑
let filePath = __dirname + "/pages" + pathname;
fs.readFile(filePath, (err, data) => {
// 文件讀取失敗
if(err){
response.statusCode = 500;
response.end('文件讀取失敗!');
return
}
// 成功,響應(yīng)體內(nèi)容
response.end(data);
})
})
三、設(shè)置資源類型 (mime類型)
媒體類型(通常稱為 Multipurpose lnternet Mail Extensions 或 MIME 類型)是一種標(biāo)準(zhǔn),用來表示文檔、文件或字節(jié)流的性質(zhì)和格式。
HTTP 服務(wù)可以設(shè)置響應(yīng)頭 Content-Type 來表明響應(yīng)體的MIME 類型,瀏覽器會根據(jù)該類型決定如何處理資源。文章來源:http://www.zghlxwxcb.cn/news/detail-630685.html
const path = require("path");
// 1. 聲明一個變量
Let mimes = {
html: 'text/html',
css: 'text/css',
js: 'text/javascript',
png: 'image/png',
jpg:'image/jpeg',
gif:'image/gif',
mp4: 'video/mp4',
mp3: 'audio/mpeg',
json: 'application/json'
}
// 2. 獲取文件后綴名
let ext = path.extname("資源文件路徑").slice(1);
// 3. 獲取文件后綴名對應(yīng)的 mime 類型
let type = mimes[ext];
// 判斷是否有對應(yīng)類型
type ? response.setHeader("content-type", type) : response.setHeader("content-type", "application/octet-stream")
- 解決亂碼問題
// 判斷是否有對應(yīng)類型
if(type){
if(ext === "html"){
response.setHeader("content-type", type + ";charset=utf-8");
}else{
response.setHeader("content-type", type);
}
}else{
response.setHeader("content-type", "application/octet-stream");
}
對于末知的資源類型,可以選擇 application/octet-stream 類型,瀏覽器在遇到該類型的響應(yīng)時,會對響應(yīng)體內(nèi)容進(jìn)行獨(dú)立存儲,也就是我們常見的下載效果。文章來源地址http://www.zghlxwxcb.cn/news/detail-630685.html
到了這里,關(guān)于Node.js-http模塊服務(wù)端請求與響應(yīng)操作,請求報文與響應(yīng)報文的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!