国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Node編寫RESTful API接口

gyl_coder / 514人閱讀

摘要:服務器每收到一條請求,都會用新的和對象觸發回調函數。但不會在回調函數被觸發之前開始對請求體的解析。在調用完請求回調函數之后,就要由你負責用方法結束響應了見下圖。比較常見的情況是當所請求的資源不存在時返回一個狀態碼。

前言

本文將通過一個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()方法結束響應了(見下圖)。這樣在結束響應之前,你可以在請求的生命期內運行任何你想運行的異步邏輯。如果你沒能結束響應,請求會掛起,直到客戶端超時,或者它會一直處于打開狀態。

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

設置響應頭

可以用res.setHeader(field, value)來設置相應的響應頭,下面是代碼:

var http = require("http")
var server = http.createServer(function(req, res){
  var body = "

Hello Node

" 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 = "

頁面丟失了

" 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種標準的方法:

GET:請求獲取指定資源。

HEAD:請求指定資源的響應頭。

POST:向指定資源提交數據。

PUT:請求服務器存儲一個資源。

DELETE:請求服務器刪除指定資源。

TRACE:回顯服務器收到的請求,主要用于測試或診斷。

CONNECT:HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器。

OPTIONS:返回服務器支持的HTTP請求方法。

創建標準的REST服務需要實現四個HTTP謂詞。每個謂詞會覆蓋一個操作:

GET:獲取

POST:新增

PUT:更新

DELETE:刪除

POST和GET請求

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

需求分析

項目決定采用前后端分離,交互數據格式約定為json,前端添加的數據提交到服務器后,由服務器存入服務器內存中。前端界面如下:

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

前端部分

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




  
  Title

  
  




Todo List

  • {{ item }}
后端部分

后端部分將用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謂詞,如果你真的讀懂了本文,那么相信這對你已經不再是問題了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/52582.html

相關文章

  • Node編寫RESTful API接口

    摘要:服務器每收到一條請求,都會用新的和對象觸發回調函數。但不會在回調函數被觸發之前開始對請求體的解析。在調用完請求回調函數之后,就要由你負責用方法結束響應了見下圖。比較常見的情況是當所請求的資源不存在時返回一個狀態碼。 前言 本文將通過一個todo list前后端分離的小項目來講解如何用Node創建符合RESTful風格的API接口。 創建HTTP服務器 我們先來了解下如何用Node創建H...

    Meils 評論0 收藏0
  • python寫通restful api service(二)

    摘要:今天項目已經能夠做一個簡單的后端服務了,在中新建一個表,就能自動提供的服務了。函數用來區分是查詢還是執行操作。字段組合值組合,由元組轉換為數組配置相應的占位符修改接口以字典形式提供參數,占位符的形式為,只支持按主鍵進行修改。 今天項目已經能夠做一個簡單的后端服務了,在mysql中新建一個表,就能自動提供restful api的CURD服務了。 關鍵點 根據REST的四種動詞形式,動態...

    liangzai_cool 評論0 收藏0
  • 最好的koa2+mysql的RESTful API腳手架,mvc架構,支持node調試,pm2部署

    摘要:基于構建的服務器腳手架這是一個基于的輕量級腳手架,支持支持使用編寫。腳手架可以根據不同的環境配置不同的信息運行價值,支持開發,測試,生產環境的不同參數配置。 #基于webpack構建的 Koa2 restful API 服務器腳手架 這是一個基于 Koa2 的輕量級 RESTful API Server 腳手架,支持 ES6, 支持使用TypeScript編寫。 GIT地址:https...

    xiongzenghui 評論0 收藏0
  • Aest 功能強大的NodeJS Restful 接口測試工具

    1. Aest 項目地址:https://github.com/wangduandu... 功能強大的REST接口測試工具, Power By Jest, axios, superstruct, mustache, lodash showImg(http://p3alsaatj.bkt.clouddn.com/20180810131752_zpRRP5_Jietu20180810-130750....

    sihai 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<