免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

用Node編寫RESTfulAPI接口的示例代碼

前言

成都創新互聯公司服務項目包括淮安網站建設、淮安網站制作、淮安網頁制作以及淮安網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,淮安網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到淮安省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!

本文介紹了如何用Node開發web程序,并通過一個todo list練習來介紹如何創建符合RESTful風格的API接口。

創建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, value)來設置相應的響應頭,下面是代碼:

var http = require('http')
var server = http.createServer(function(req, res){
 var body = '<h2>Hello Node</h2>'
 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請求

接下來,通過一個todo list練習來編寫RESTful風格的GET和POST接口。

需求分析

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

用Node編寫RESTful API接口的示例代碼

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

前端部分

前端采用vue.js作為框架,ajax請求采用axios庫。代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>

 <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
 <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>

<body>

<div id="app">
 <h2>Todo List</h2>
 <ul>
  <li v-for="(item, index) in items" :key="index">{{ item }}</li>
 </ul>

 <input type="text" v-model="item">
 <button @click="postApi">button</button>
</div>

<script>
 new Vue({
  el: '#app',
  data: {
   items: [],
   item: ''
  },
  created () {
   axios.get('http://localhost:3000/')
    .then(response => {
     this.items = response.data
    })
    .catch(function (error) {
     console.log(error)
    })
  },
  methods: {
   postApi () {
    axios.post('http://localhost:3000/', {
     item: this.item
    })
     .then(response => {
      this.items = response.data
     })
     .catch(function (error) {
      console.log(error)
     })
   }
  }
 })
</script>
</body>
</html>

后端部分

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...')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。

名稱欄目:用Node編寫RESTfulAPI接口的示例代碼
轉載來源:http://m.newbst.com/article24/pgcsje.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣、企業建站商城網站、品牌網站制作、定制網站、網站導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設