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

資訊專欄INFORMATION COLUMN

【Node Hero】6. Node.js Request 模塊

BlackHole1 / 552人閱讀

摘要:狀態(tài)碼描述了請求的結(jié)果,它對錯(cuò)誤處理是必不可少的。響應(yīng)還沒完成成功這些狀態(tài)碼表示請求被接收并正確處理了。服務(wù)器錯(cuò)誤當(dāng)服務(wù)器由于某些錯(cuò)誤不能完成有效的請求時(shí),就發(fā)送這些狀態(tài)碼。

本文轉(zhuǎn)載自:眾成翻譯
譯者:網(wǎng)絡(luò)埋伏紀(jì)事
鏈接:http://www.zcfy.cc/article/1758
原文:https://blog.risingstack.com/node-hero-node-js-request-module-tutorial/

在如下教程中,將學(xué)習(xí) HTTP 協(xié)議的基礎(chǔ)知識,以及如何使用 Node.js 的 request 模塊從外部源獲取資源。

什么是 HTTP?

HTTP 代表超文本傳輸協(xié)議(Hypertext Transfer Protocol)。HTTP 作為在客戶機(jī)-服務(wù)器計(jì)算模型中的請求-響應(yīng)協(xié)議。

HTTP 狀態(tài)碼

在深入與其它 API 的通訊之前,我們來回顧一下在此過程中會(huì)遇到的 HTTP 狀態(tài)碼。狀態(tài)碼描述了請求的結(jié)果,它對錯(cuò)誤處理是必不可少的。

1xx - 響應(yīng)還沒完成(Informational)

2xx - 成功:這些狀態(tài)碼表示請求被接收并正確處理了。最常見的成功響應(yīng)碼是 200 OK201 Created204 No Content

3xx - 重定向: 這組狀態(tài)碼表示要完成請求,客戶端必須要做一些額外的操作。最常見的重定向響應(yīng)碼是 301 Moved Permanently304 Not Modified

4xx - 客戶端錯(cuò)誤: 這類狀態(tài)碼被用在客戶端發(fā)送的請求出現(xiàn)了某種錯(cuò)誤時(shí)。服務(wù)器響應(yīng)通常會(huì)包含了對錯(cuò)誤的解釋。最常見的客戶端錯(cuò)誤碼是 400 Bad Request401 Unauthorized403 Forbidden404 Not Found409 Conflict

5xx - 服務(wù)器錯(cuò)誤: 當(dāng)服務(wù)器由于某些錯(cuò)誤不能完成有效的請求時(shí),就發(fā)送這些狀態(tài)碼。原因可能是代碼中的一個(gè) bug,或者一些臨時(shí)或者永久性的無能。最常見的服務(wù)器錯(cuò)誤狀態(tài)碼是 500 Internal Server Error503 Service Unavailable。如果你想學(xué)習(xí)更多有關(guān) HTTP 狀態(tài)碼的知識,可以在這里找到詳細(xì)的解釋。

向外部 API 發(fā)送請求

在 Node 中,連接到外部 API 是很簡單的。只需要 require 核心 HTTP 模塊,然后開始發(fā)送請求即可。

當(dāng)然,有更好的方式來調(diào)用外部端點(diǎn)。在 NPM 上可以找到很多讓這個(gè)過程更容易的模塊。例如,兩個(gè)最流行的模塊是 request 和 superagent。

這兩個(gè)模塊都有錯(cuò)誤優(yōu)先的回調(diào)接口,這就會(huì)導(dǎo)致一些問題(我打賭你已經(jīng)聽說過回調(diào)地獄),但是幸運(yùn)的是我們可以訪問封裝了 Promise 的版本。

使用 Node.js Request 模塊

request-promise 模塊 的使用很簡單。從 NPM 安裝它之后,只需要 require 它:

const request = require("request-promise")  

發(fā)送一個(gè) GET 請求也那么簡單:

const options = {  
  method: "GET",
  uri: "https://risingstack.com"
}
?
request(options)  
  .then(function (response) {
    // Request was successful, use the response object at will
  })
  .catch(function (err) {
    // Something bad happened, handle the error
  })

如果調(diào)用一個(gè) JSON API,你可能會(huì)想讓 request-promise 自動(dòng)解析響應(yīng)。此時(shí),只需要將其添加到 request 選項(xiàng)即可:

json: true  

POST 請求的工作方式也類似:

const options = {  
  method: "POST",
  uri: "https://risingstack.com/login",
  body: {
    foo: "bar"
  },
  json: true 
    // JSON stringifies the body automatically
}
?
request(options)  
  .then(function (response) {
    // Handle the response
  })
  .catch(function (err) {
    // Deal with the error
  })

要添加查詢字符串參數(shù),只需要將 qs 屬性添加到 options 對象:

const options = {  
  method: "GET",
  uri: "https://risingstack.com",
  qs: {
    limit: 10,
    skip: 20,
    sort: "asc"
  }
}

這會(huì)讓請求 URL 變?yōu)椋?b>https://risingstack.com?limit=10&skip=20&sort=asc。

還可以用添加查詢參數(shù)同樣的方式來定義所有請求頭:

const options = {  
  method: "GET",
  uri: "https://risingstack.com",
  headers: {
    "User-Agent": "Request-Promise",
    "Authorization": "Basic QWxhZGRpbjpPcGVuU2VzYW1l"
  }
}
錯(cuò)誤處理

錯(cuò)誤處理是對外部 API 發(fā)起請求的重要部分,因?yàn)椴荒艽_保會(huì)發(fā)生什么。除了客戶端錯(cuò)誤以外,服務(wù)器會(huì)響應(yīng)一個(gè)錯(cuò)誤,或者就發(fā)送一個(gè)錯(cuò)誤或者不一致格式的數(shù)據(jù)。在試著處理響應(yīng)時(shí),要記住這些。此外,對每次請求都使用 catch 也是一個(gè)避免外部服務(wù)讓服務(wù)器崩潰的好辦法。

綜合

既然已經(jīng)學(xué)過如何創(chuàng)建一個(gè) Node.js HTTP 服務(wù)器,如何渲染 HTTP 頁面,如何從外部 API 獲取數(shù)據(jù),那么現(xiàn)在就到了將它們放在一起的時(shí)候了!

在本例中,我們將創(chuàng)建一個(gè)小型 Express 應(yīng)用程序,該程序基于城市名渲染當(dāng)前的天氣條件。

要獲取 AccuWeather? API key,請?jiān)L問 Accuweather 開發(fā)者網(wǎng)站。

const express = require("express")  
const rp = require("request-promise")  
const exphbs = require("express-handlebars")

const app = express()

app.engine(".hbs", exphbs({  
  defaultLayout: "main",
  extname: ".hbs",
  layoutsDir: path.join(__dirname, "views/layouts")
}))
app.set("view engine", ".hbs")  
app.set("views", path.join(__dirname, "views"))

app.get("/:city", (req, res) => {  
  rp({
    uri: "http://apidev.accuweather.com/locations/v1/search",
    qs: {
      q: req.params.city,
      apiKey: "api-key"
         // Use your accuweather API key here
    },
    json: true
  })
    .then((data) => {
      res.render("index", data)
    })
    .catch((err) => {
      console.log(err)
      res.render("error")
    })
})

app.listen(3000)  

上面的示例做如下事情:

創(chuàng)建一個(gè) Express 服務(wù)器

設(shè)置 handlebars 結(jié)構(gòu) - 對于 .hbs 文件,請參考 Node.js HTTP 教程

發(fā)送請求給外部 API

如果一切順利,就渲染頁面

否則,就顯示錯(cuò)誤頁并記錄錯(cuò)誤

下一步

下章將學(xué)習(xí)如何正確組織 Node.js 項(xiàng)目。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85140.html

相關(guān)文章

  • Node Hero】9. Node.js 單元測試

    摘要:基本上,測試金字塔描述你應(yīng)該編寫單元測試集成測試和端到端測試。集成測試要比端到端測試多,單元測試甚至要更多一些。應(yīng)用程序單元測試編寫單元測試,是為了看看給定的模塊單元是否工作。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1754原文:https://blog.risingstack.com/node-hero-node-js-un...

    104828720 評論0 收藏0
  • Node Hero】4. 第一個(gè) Node.js HTTP 服務(wù)器

    摘要:本文轉(zhuǎn)載自眾成翻譯譯者網(wǎng)絡(luò)埋伏紀(jì)事鏈接原文本章我會(huì)指導(dǎo)你啟動(dòng)一個(gè)簡單的服務(wù)器,并開始為請求服務(wù)。現(xiàn)在,我們開始創(chuàng)建第一個(gè)服務(wù)器我們將模塊,并將服務(wù)器綁定到端口來監(jiān)聽。必須用如下方式啟動(dòng)服務(wù)器總結(jié)本章學(xué)習(xí)了如何從頭開始創(chuàng)建第一個(gè)服務(wù)器。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1750原文:https://blog.risings...

    Coly 評論0 收藏0
  • Node Hero】1. 開始使用 Node.js

    摘要:使用一個(gè)事件驅(qū)動(dòng)的非阻塞式的模型,讓它輕量而高效。也就是說提供了用編寫服務(wù)器的可能性,這種服務(wù)器具有令人難以置信的性能。正如官方聲明所說是一個(gè)使用與瀏覽器相同引擎的運(yùn)行時(shí)。這意味著有兩個(gè)發(fā)布版本穩(wěn)定版和試驗(yàn)版。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1748原文:https://blog.risingstack.com/nod...

    hqman 評論0 收藏0
  • Node Hero】2. 使用 NPM

    摘要:網(wǎng)站和使用同樣的注冊庫來顯示模塊以及查找模塊。使用在上一章開始使用中,當(dāng)創(chuàng)建文件時(shí),已經(jīng)遇到了。此外,全局命名空間只包含公共模塊。通過引入作用域包來解決此問題。下一步異步編程下一章學(xué)習(xí)使用回調(diào)和實(shí)現(xiàn)異步編程的原理。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1749原文:https://blog.risingstack.com/n...

    CarterLi 評論0 收藏0
  • Node Hero】7. Node.js 項(xiàng)目結(jié)構(gòu)

    摘要:本教程會(huì)學(xué)習(xí)如何正確組織一個(gè)項(xiàng)目的結(jié)構(gòu),從而在應(yīng)用程序開始增長時(shí)避免混亂。項(xiàng)目結(jié)構(gòu)的五個(gè)基本規(guī)則組織項(xiàng)目有不少可能的方式并且每種已知的方式都有其興衰。過去在,我們有機(jī)會(huì)創(chuàng)建各種規(guī)模的高效應(yīng)用程序,也獲得了大量關(guān)于項(xiàng)目結(jié)構(gòu)注意事項(xiàng)的見解。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1756原文:https://blog.rising...

    張紅新 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<