前一篇博客裏我們說到了 Node.js
和 fs
模塊的使用,主要是安裝配置 Node.js
和 HTTP
web模塊,不瞭解的可以去看下我的前一篇博客 Node.js 搭建 web 程序 之 使用基礎 ,本篇我們將Node.js
和模塊模塊
實現路由配置。
fs文件系統模塊
fs
模塊是 Node.js
主要用於讀文件。
引用模塊
var http = require('HTTP')
讀取文件分爲同步和異步讀取。
異步讀文件
fs.readFile('index.html', function(err, data) {
console.log(data)
})
同步讀文件
var data = fs.readFileSync("index.html","utf8");
console.log(data);
當我讀取創建的 index.html
文件,執行後來看一下,我們發現得到的是一串 Buffer
碼。
將 Buffer 碼處理一下。
fs.readFile('index.html', function(err, data) {
console.log(data.toString())
})
此時輸出的是 HTML 的文件內容。
在上篇博客中,我們簡單的說到了 HTTP
模塊搭建 web
服務,響應結束後返回的內容會在頁面中顯示,我們來簡單的讀取一個文件通過服務端訪問。
// 引用HTTP模塊
var http = require("http");
// 引用fs模塊
var fs = require('fs')
// 創建服務
var server = http.createServer();
// 監聽request事件
server.on("request", function(req, res) {
// 異步讀文件
fs.readFile('index.html', function(err, data) {
// 響應結束
res.end(data.toString())
})
})
// 開啓服務 端口號3000
server.listen(3000)
當我們通過 localhost:3000
訪問就可以顯示讀取的文件內容了,但是我們如果訪問其他頁面的時候也是這個頁面,可以一個服務器不可能就是一個頁面,這就需要我們就需要 HTTP 模塊的路由的配置了
HTTP模塊
路由的配置
在我們監聽 request
事件的時候得到兩個參數,request
請求 和 response
響應。
server.on("request", function(request, response) {
console.log(request)
}
通過輸出 request
請求,我們得到了一大堆參數,在這一大堆參數中,url
記錄 request
請求的地址,method
記錄 request
請求的類型,所有web文件的請求都是GET
請求。
server.on("request", function(request, response) {
console.log(request.url)
}
我們可以根據判斷請求的地址,響應不同的文件。
// 引用HTTP模塊
var http = require("http");
// 引用fs模塊
var fs = require('fs');
// 創建服務
var server = http.createServer();
// 監聽request事件
server.on("request", function(request, response) {
if (request.url == '/index.html' && request.method == 'GET') {
fs.readFile('index.html', function(err, data) {
response.end(data.toString())
})
} else if (request.url == '/login.html' && request.method == 'GET') {
fs.readFile('login.html', function(err, data) {
response.end(data.toString())
})
}
});
// 開啓服務 端口號3000
server.listen(3000)
響應頭設置
我們都知道,一個網頁的資源是豐富多彩的,所以在請求的時候我們需要添加不同類型文件的響應頭。
文本的響應頭
response.writeHead(200,{"content-type" : "text/html;charset=utf8"})
response.writeHead(200,{"content-type" : "text/javascript;charset=utf8"})
圖片的響應頭
response.writeHead(200,{"content-type" : "image/jpeg"})
response.writeHead(200,{"content-type" : "image/png"})
簡單的HTTP路由配置就在下方了,下篇博客我們將 Node.js
和 MongoDB
數據庫一起使用
// 引用HTTP模塊
var http = require("http");
// 引用fs模塊
var fs = require('fs');
// 創建服務
var server = http.createServer();
// 監聽request事件
server.on("request", function(request, response) {
if (request.url == '/index.html' && request.method == 'GET') {
response.writeHead(200, { "content-type": "text/html;charset=utf8" })
fs.readFile('index.html', function(err, data) {
response.end(data.toString())
})
} else if (request.url == '/index.js' && request.method == 'GET') {
response.writeHead(200, { "content-type": "text/javascript;charset=utf8" })
fs.readFile('index.js', function(err, data) {
response.end(data.toString())
})
} else if (request.url == '/img.png' && request.method == 'GET') {
response.writeHead(200, { "content-type": "image/png" })
fs.readFile('img.png', function(err, data) {
response.end(data)
})
} else if (request.url == '/login.html' && request.method == 'GET') {
response.writeHead(200, { "content-type": "text/html;charset=utf8" })
fs.readFile('login.html', function(err, data) {
response.end(data.toString())
})
}
});
// 開啓服務 端口號3000
server.listen(3000)