node.js入門 – 9.api:http

來源:互聯網
上載者:User

  node一個重要任務是用來建立web服務,接下來我們就學習與此相關的一個重要的api -- http。我們使用http.createServer()建立一個http服務的執行個體,用來處理來自客戶的請求。http模組包含一些重要的內容,下面我們就來學習。

  

  http伺服器

  我們先來看一個簡單的例子,如何建立一個簡單的伺服器。

require('http').createServer(function(req,res){
  res.writeHead(200, {});  res.end('hello world');}
).listen(8125);

  上面的代碼比較簡單,使用require('http')建立了一個http的執行個體,然後使用createServer方法建立了一個伺服器,使用listen監聽8125連接埠。上面的代碼使用了鏈式的編碼風格,雖然簡單但是可讀性差,變數複用性也不好,所以我們建議使用下面的編碼風格。

var http = require('http');var server = http.createServer();var handleReq = function(req,res){  res.writeHead(200, {});  res.end('hello world');};server.on('request', handleReq);server.listen(8125);

  現在的代碼就明了多了,通過 var server = http.createServer() 建立了伺服器,並把它儲存在變數server中,接下來使用server.on('request', handleReq)綁定request事件。對request事件的綁定,例1鏈式風格的編碼並沒能直接體現出來。

  http提供了很多其他的事件,下面我們簡單介紹。

  1.connection和close:分別代表建立和關閉與用戶端的tcp串連。

  2.checkContinue:當用戶端向伺服器端發送大量資料的時候,他將檢查是否可以繼續,此時觸發事件。當觸發了checkContinue事件時,request事件不再觸發。

  3.upgrade:當用戶端請求升級協議的時候觸發,如果該事件沒有相應的處理,伺服器將拒絕升級。

  4.clientError:用戶端發生異常時觸發。

 

  http用戶端

  有時候你需要使用到向外串連的http請求,例如使用web服務,訪問文本資料來源或者抓取web網站資訊,這時你可以使用http.ClientRequest建立http請求。先看一個例子:

var http = require('http');var opts = {  host: 'www.google.com'  port: 80,  path: '/',  method: 'GET'};var req = http.request(opts, function(res) {  console.log(res);  res.on('data', function(data) {    console.log(data);  });});req.end();

  我們建立了一個http請求,為響應添加了data事件,最後使用req.end()初始化和發送我們的請求。

  

  建立http GET 請求

var http = require('http');var opts = {  host: 'www.google.com'  port: 80,  path: '/',};var req = http.get(opts, function(res) {  console.log(res);  res.on('data', function(data) {    console.log(data);  });});

  這個例子和之前的例子實現同樣的功能,區別就在於opts對象少了method屬性,使用http.get()代替了之前的var req=http.request()和req.end()。由於返回回來的資料是2進位資料,我們需要使用response.setEncoding()實現編碼,所以我們需要對代碼做點小修改。

var http = require('http');var opts = {  host: 'www.google.com'  port: 80,  path: '/',};var req = http.get(opts, function(res) {  console.log(res);
  res.setEncoding('utf8');  res.on('data', function(data) {    console.log(data);  });});

 

  使用http POST和PUT發送資料

var options = {  host: 'www.example.com',  port: 80,  path: '/submit',  method: 'POST'};var req = http.request(options, function(res) {  res.setEncoding('utf8');  res.on('data', function (chunk) {    console.log('BODY: ' + chunk);  });});req.write("my data");req.write("more of my data");req.end();

  上面的例子我們使用了req.write()方法,向伺服器說明我們要發送的資料,最後使用req.end()初始化並發送請求。代碼中的res是ClientResponse對象,他有兩個重要的屬性:statusCode(狀態代碼)和header(回應標頭)。

 

  URL

  url模組提供了一些方法,讓我們解析和處理url字串變得更加簡單,這些方法包括:parse, format和resolve。我們來看例子,逐行在node REPL中執行下面的命令(之前的課程講到了如何使用,node.js入門 - 8.api:events)。

var URL = require('url');var myUrl = "http://www.nodejs.org/some/url/?with=query&param=that&are=awesome#alsoahash";myUrlparsedUrl = URL.parse(myUrl);parsedUrl = URL.parse(myUrl, true);

  執行結果:

 

   querystring

  querystring模組式用來處理querystring字串的,他包括如下方法:parse, decode, escape, unescape, unescapeBuffer, encode和stringify。我們來看一個例子。

var qs = require('querystring');qs.parse('a=1&b=2&c=d');

  執行結果:

   再來一例,關於encode方法。

var qs = require('querystring');var myObj = {'a':1, 'b':5, 'c':'cats', 'func': function(){console.log('dogs')}}qs.encode(myObj);

  執行結果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.