使用Node.js寫一個簡單的api介面

九旬大爺的夢發表於2018-12-14

引入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/ 就可以看到:

91544605447_.pic.jpg

同時可以看到命令列中有列印的資訊:

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": "尼古拉丁 * 趙四"}
複製程式碼

所以當前的目錄結構是:

41544775041_.pic.jpg

然後我們可以在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

相關文章