引入Http模組
預設你已經安裝了Node.js Node當中內建了Http模組; 可以使用
var http= require("http");
複製程式碼
引入http模組;
Hello world
用Node.js實現一個HTTP伺服器程式非常簡單。我們實現一個最簡單的Web程式,
它對於所有請求,都返回Hello world!,新建一個資料夾apiDemo
在裡面新建一個server.js
寫入:
// 匯入http模組:
var http = require('http');
// 建立http server,並傳入回撥函式:
var server = http.createServer(function (request, response) {
// 回撥函式接收request和response物件,
// 獲得HTTP請求的method和url:
console.log(request.method + ': ' + request.url);
// 將HTTP響應200寫入response, 同時設定Content-Type: text/html:
response.writeHead(200, {'Content-Type': 'text/html'});
// 將HTTP響應的HTML內容寫入response:
response.end('Hello world!');
});
// 讓伺服器監聽8080埠:
server.listen(8080);
console.log('Server is running at http://127.0.0.1:8080/');
複製程式碼
然後在當前目錄命令提示符下(cmd等)執行, 輸入:
node server.js
複製程式碼
然後開啟瀏覽器輸入:http://127.0.0.1:8080/
就可以看到:
同時可以看到命令列中有列印的資訊:
GET: /
GET: /favicon.ico
複製程式碼
主要需要了解的是:
http.createServer(function(request, response){})
複製程式碼
它的作用是建立一個http服務,裡面傳一個回撥函式,函式中包含兩個引數分別是(request,response)。
其中request是請求物件,response是響應物件。
可以根據request
物件拿到請求頭的一些資訊,如: request.url
--返回請求路徑
響應成功後:
response.writeHead()
————傳送一個響應頭給請求
response.end('xxx')
————響應成功 返回xxx
參考 Nodez中文網-HTTP
路由
我們是想當訪問http://127.0.0.1:8080/
的時候返回當前目錄的index.html。
也就是說當request.url === '/'
是true
時就可以確定當前請求的是根目錄了,
var url = request.url;
console.log(url);
// '/'
複製程式碼
我們能建立一個服務,並且能使用response.end('Hello world!');
返回“Hello world!”。如果想返回一個檔案則需要用到Node.js的一個模組了——fs 檔案系統。
它是Node當中處理檔案的模組,首先引入:
var fs= require('fs');
複製程式碼
可以使用fs.readFile()
來讀取檔案
fs.readFile('./index.html', function(err, data) {
if (err) throw err;
console.log(data);
// <Buffer 3c 21 44 4f 4...>
});
複製程式碼
回撥函式 有兩個引數 (err, data),其中 data 是檔案的內容,以二進位制形式返回。
然後我們就可以編寫程式碼了,當訪問根目錄時,返回index.html檔案
var http= require('http');
var fs= require('fs');
var server= http.createServer(function(request, response){
var url = request.url;
if(url === '/'){
fs.readFile('./index.html', function(err, data){
if(!err){
response.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"});
response.end(data)
}else{
throw err;
}
});
}else{
console.log("錯誤");
}
});
server.listen(8080, '127.0.0.1');
複製程式碼
然後在當前目錄下新建index.html
,在這裡我們可以寫一個ajax請求,一會我們點選按鈕來實現ajax請求一組資料:
<div id="box">看不到看不到</div>
<button onclick="success()">我是按鈕</button>
<script>
function success(){
var http= new XMLHttpRequest();
http.onreadystatechange= function(){
if(http.status == 200 && http.readyState == 4){
var msg= http.responseText;
var box= document.getElementById('box');
box.innerHTML= JSON.parse(msg).name;
}
}
//傳送請求
http.open('GET', '/data');
http.send();
}
</script>
複製程式碼
這段程式碼是點選按鈕的時候 會向/data
發起一個ajsx請求,
實現簡單的API介面
既然能訪問根目錄時可以返回html檔案,那我們可以自己設定一個url,當請求這個url是我們就給它返回一組json資料。正常來講這些資料應該是從資料庫讀取的,在這裡只模擬一組json資料,在當前目錄新建一個data.json
:
{"name": "尼古拉丁 * 趙四"}
複製程式碼
所以當前的目錄結構是:
然後我們可以在server.js中判斷一下,當請求的url是/data
時,則返回data.json:
if(url === '/data'){
fs.readFile('./data.json', function(err, data){
if(!err){
response.writeHead(200, {"Content-Type": "application/json"});
response.end(data);
}else{
throw err;
}
})
}
複製程式碼
然後開啟瀏覽器 http://127.0.0.1:8080
後,就會出現index.html頁面,點選出現的按鈕就會觸發一個對 /data
的ajax請求,當server.js接受到請求後,就會判斷url === '/data'
,然後它就會吧 data.json
返回給我們。
最後的實現是點選按鈕出現尼古拉丁 * 趙四,
GItHub原始碼:node-apiDemo
參考:
廖雪峰-http詳解
Node-fs