鍍金池/ 教程/ HTML/ HTTP 客戶端
備忘錄模式
解釋器模式
類似 Python 的 zip 函數(shù)
類變量和實(shí)例變量
提示參數(shù)
指數(shù)對(duì)數(shù)運(yùn)算
檢查變量的類型是否為數(shù)組
由數(shù)組創(chuàng)建一個(gè)字符串
生成隨機(jī)數(shù)
刪除數(shù)組中的相同元素
大寫(xiě)單詞首字母
雙向服務(wù)器
類的混合
計(jì)算復(fù)活節(jié)的日期
轉(zhuǎn)換弧度和度
找到上一個(gè)月(或下一個(gè)月)
雙向客戶端
橋接模式
嵌入 JavaScript
AJAX
觀察者模式
克隆對(duì)象(深度復(fù)制)
一個(gè)隨機(jī)整數(shù)函數(shù)
清理字符串前后的空白符
歸納數(shù)組
平方根倒數(shù)快速算法
適配器模式
打亂數(shù)組中的元素
將數(shù)組連接
使用數(shù)組來(lái)交換變量
更快的 Fibonacci 算法
服務(wù)器
服務(wù)端和客戶端的代碼重用
客戶端
查找子字符串
策略模式
CoffeeScrip 的 type 函數(shù)
由數(shù)組創(chuàng)建一個(gè)對(duì)象詞典
回調(diào)綁定
工廠方法模式
映射數(shù)組
當(dāng)函數(shù)括號(hào)不可選
生成可預(yù)測(cè)的隨機(jī)數(shù)
不使用 jQuery 的 Ajax 請(qǐng)求
把字符串轉(zhuǎn)換為小寫(xiě)形式
類方法和實(shí)例方法
擴(kuò)展內(nèi)置對(duì)象
定義數(shù)組范圍
MongoDB
匹配字符串
創(chuàng)建一個(gè)不存在的對(duì)象字面值
列表推導(dǎo)
比較范圍
修飾模式
檢測(cè)每個(gè)元素
拆分字符串
字符串插值
對(duì)象數(shù)組
去抖動(dòng)函數(shù)
使用 Nodeunit 測(cè)試
SQLite
單件模式
篩選數(shù)組
替換子字符串
數(shù)組最大值
計(jì)算(美國(guó)和加拿大的)感恩節(jié)日期
找到一個(gè)月中的最后一天
計(jì)算兩個(gè)日期中間的天數(shù)
基本的 HTTP 服務(wù)器
把字符串轉(zhuǎn)換為大寫(xiě)形式
使用 HTML 命名實(shí)體替換 HTML 標(biāo)簽
For 循環(huán)
模板方法模式
重復(fù)字符串
使用 Jasmine 測(cè)試
對(duì)象的鏈?zhǔn)秸{(diào)用
數(shù)學(xué)常數(shù)
反轉(zhuǎn)數(shù)組
計(jì)算月球的相位
使用 Heregexes
查找子字符串
生成器模式
遞歸函數(shù)
HTTP 客戶端
創(chuàng)建 jQuery 插件
檢測(cè)與構(gòu)建丟失的函數(shù)
生成唯一ID
命令模式

HTTP 客戶端

問(wèn)題

你想創(chuàng)建一個(gè) HTTP 客戶端。

解決方案

在這個(gè)方法中,我們將使用 HTTP 庫(kù)。我們將從一個(gè)簡(jiǎn)單的客戶端 GET 請(qǐng)求示例返回計(jì)算機(jī)的外部 IP 。

關(guān)于 GET

http = require 'http'

http.get { host: 'www.google.com' }, (res) ->
    console.log res.statusCode

get 函數(shù),從 node.js's http 模塊,發(fā)出一個(gè) GET 請(qǐng)求到一個(gè) http 服務(wù)器。響應(yīng)是以回調(diào)的形式,我們可以在一個(gè)函數(shù)中處理。這個(gè)例子僅僅輸出響應(yīng)狀態(tài)代碼。檢查一下:

$ coffee http-client.coffee 
200

我的 IP 是什么?

如果你是在一個(gè)類似局域網(wǎng)的依賴于 NAT 的網(wǎng)絡(luò)中,你可能會(huì)面臨找出外部 IP 地址的問(wèn)題。讓我們?yōu)檫@個(gè)問(wèn)題寫(xiě)一個(gè)小的 coffeescript 。

http = require 'http'

http.get { host: 'checkip.dyndns.org' }, (res) ->
    data = ''
    res.on 'data', (chunk) ->
        data += chunk.toString()
    res.on 'end', () ->
        console.log data.match(/([0-9]+\.){3}[0-9]+/)[0]

我們可以從監(jiān)聽(tīng) 'data' 事件的結(jié)果對(duì)象中得到數(shù)據(jù),知道它結(jié)束了一次 'end' 的觸發(fā)事件。當(dāng)這種情況發(fā)生時(shí),我們可以做一個(gè)簡(jiǎn)單的正則表達(dá)式來(lái)匹配我們提取的 IP 地址。試一試:

$ coffee http-client.coffee 
123.123.123.123

討論

請(qǐng)注意 http.get 是 http.request 的快捷方式。后者允許您使用不同的方法發(fā)出 HTTP 請(qǐng)求,如 POST 或 PUT。

在這個(gè)問(wèn)題上的 API 和整體信息,檢查 node.js's httphttps 文檔頁(yè)面。此外, HTTP spec 可能派上用場(chǎng)。

練習(xí)

  • 為鍵值存儲(chǔ) HTTP 服務(wù)器創(chuàng)建一個(gè)客戶端,使用基本的 HTTP 服務(wù)器方法。