目錄
前言
建立HTTP伺服器
設定回應頭
Hello Node
設定狀態碼
建構 RESTful Web 服務
#POST和GET請求
需求分析
前端部分
Todo List
後端部分
小结
首頁 web前端 js教程 用Node編寫RESTful API接口

用Node編寫RESTful API接口

Jul 07, 2018 pm 06:00 PM
axios html javascript node.js vue.js

這篇文章主要介紹了關於用Node編寫RESTful API接口,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

前言

本文將透過一個todo list前後端分離的小專案來講解如何用Node建立符合RESTful風格的API介面。

建立HTTP伺服器

我們先來了解下如何用Node建立HTTP伺服器(熟悉的讀者可以直接跳過)。
用Node建立HTTP伺服器是非常方便的,建立HTTP伺服器要呼叫http.createServer()函數,它只有一個參數,是個回調函數,伺服器每次收到HTTP請求後都會調用這個回調函數。這個回呼會收到兩個參數,請求和回應對象,通常簡寫為req和res:

var http = require('http')
var server = http.createServer(function(req, res){
   res.end('Hello World')
})
server.listen(3000, '127.0.0.1')
登入後複製

運行上面的程式碼,在瀏覽器中存取http://localhost:3000。然後你應該可以看到一個包含「Hello World.」的普通文字頁面。

伺服器每收到一個HTTP請求,都會用新的req和res物件觸發回呼函數。
在觸發回呼函數之前,Node會解析請求的HTTP頭,並將它們作為req物件的一部分提供給請求回呼。但Node不會在回呼函數被觸發之前開始對請求體的解析。這種做法跟某些服務端框架不同,例如PHP就是在程式邏輯運作前就把請求頭和請求體都解析出來了。

Node不會自動往客戶端寫任何回應。在調用完請求回呼函數之後,就要由你負責用res.end()方法結束回應了(見下圖)。這樣在結束回應之前,你可以在請求的生命期內運行任何你想運行的非同步邏輯。如果你沒能結束回應,請求會掛起,直到客戶端逾時,或者它會一直處於開啟狀態。
用Node編寫RESTful API接口

搭建HTTP伺服器只是個開始。接下來我們來看看如何設定回應狀態碼回應頭中的字段,如何正確處理異常

設定回應頭

可以用res.setHeader(field, 值)來設定對應的回應頭,以下是程式碼:

var http = require('http')
var server = http.createServer(function(req, res){
  var body = '<h1 id="Hello-Node">Hello Node</h1>'
  res.setHeader('Content-Length', body.length)
  res.setHeader('Content-Type', 'text/html')
  res.end(body)
})
server.listen(3000)
登入後複製

設定狀態碼

我們常常需要傳回預設狀態碼200以外的HTTP狀態碼。比較常見的情況是當所要求的資源不存在時傳回一個404 Not Found狀態碼。
這可以透過設定res.statusCode屬性來實現。在程式回應期間可以隨時給這個屬性賦值,但必須在第一次呼叫res.write()或res.end()之前。

var http = require('http')
var server = http.createServer(function(req, res) {
  var body = '<p>页面丢失了</p>'
  res.setHeader('Content-Type', 'text/html;charset=utf-8')
  res.statusCode = 404
  res.end(body)
})
server.listen(3000, '127.0.0.1')
登入後複製

Node的策略是提供小而強的網路API,不同於Rails或Django之類的框架。像會話這種進階概念以及HTTP cookies這樣的基礎元件都沒有包括在Node的核心之中。那些都要由第三方模組提供。

建構 RESTful Web 服務

Roy Fielding博士在2000年提出了表徵狀態轉移(REST)。它是一種基於 HTTP 協定的網路應用的介面風格
依照規定,例如GET、POST、PUT和DELETE,分別與資源的取得、建立、更新和刪除相對應。
HTTP  協定定義了以下8種標準的方法:

  1. GET:請求取得指定資源。

  2. HEAD:請求指定資源的回應頭。

  3. POST:向指定資源提交資料。

  4. PUT:請求伺服器儲存一個資源。

  5. DELETE:請求伺服器刪除指定資源。

  6. TRACE:回顯伺服器收到的請求,主要用於測試或診斷。

  7. CONNECT:HTTP/1.1 協定中預留給能夠將連線改為管道方式的代理伺服器。

  8. OPTIONS:傳回伺服器支援的HTTP請求方法。

建立標準的REST服務需要實作四個HTTP謂詞。每個謂詞會覆寫一個運算:

  1. GET:取得

  2. #POST:新增

  3. PUT:更新

  4. DELETE:刪除

#POST和GET請求

接下來,我們開始寫符合RESTful風格的GET和POST介面。

需求分析

專案決定採用前後端分離,互動資料格式約定為json,前端新增的資料提交到伺服器後,由伺服器存入伺服器記憶體中。前端介面如下:
用Node編寫RESTful API接口

首先,我們先寫前端部分。

前端部分

前端部分採用當今流行的vue.js作為框架,ajax請求採用axios函式庫。程式碼如下:

nbsp;html>


  <meta>
  <title>Title</title>

  <script></script>
  <script></script>




<p>
  </p><h1 id="Todo-List">Todo List</h1>
  
登入後複製
        
  • {{ item }}
  •   
      <script> new Vue({ el: &#39;#app&#39;, data: { items: [], item: &#39;&#39; }, created () { axios.get(&#39;http://localhost:3000/&#39;) .then(response => { this.items = response.data }) .catch(function (error) { console.log(error) }) }, methods: { postApi () { axios.post(&#39;http://localhost:3000/&#39;, { item: this.item }) .then(response => { this.items = response.data }) .catch(function (error) { console.log(error) }) } } }) </script>

後端部分

後端部分將以req.method取得請求的HTTP謂詞,並分情況處理。程式碼如下:

var http = require('http')

var items = []

http.createServer(function(req, res) {
  // 设置cors跨域
  res.setHeader('Access-Control-Allow-Origin', '*')
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type')
  res.setHeader('Content-Type', 'application/json')

  switch (req.method) {
    // 设置了cors跨域
    // post请求时,浏览器会先发一次options请求,如果请求通过,则继续发送正式的post请求
    case 'OPTIONS':
      res.statusCode = 200
      res.end()
      break

    case 'GET':
      let data = JSON.stringify(items)
      res.write(data)
      res.end()
      break

    case 'POST':
      let item = ''
      req.on('data', function (chunk) {
        item += chunk
      })
      req.on('end', function () {
        // 存入
        item = JSON.parse(item)
        items.push(item.item)
        // 返回到客户端
        let data = JSON.stringify(items)
        res.write(data)
        res.end()
      })
      break
  }
}).listen(3000)

console.log('http server is start...')
登入後複製

小结

当然,一个完整的RESTful服务还应该实现PUT谓词和DELETE谓词,如果你真的读懂了本文,那么相信这对你已经不再是问题了。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

async/await 并行请求和错误处理

node爬取拉勾网数据并导出为excel文件

以上是用Node編寫RESTful API接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles