日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node.js入门 - 9.api:http

發(fā)布時(shí)間:2025/6/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node.js入门 - 9.api:http 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  node一個(gè)重要任務(wù)是用來創(chuàng)建web服務(wù),接下來我們就學(xué)習(xí)與此相關(guān)的一個(gè)重要的api -- http。我們使用http.createServer()創(chuàng)建一個(gè)http服務(wù)的實(shí)例,用來處理來自客戶的請(qǐng)求。http模塊包含一些重要的內(nèi)容,下面我們就來學(xué)習(xí)。

  

  http服務(wù)器

  我們先來看一個(gè)簡(jiǎn)單的例子,如何創(chuàng)建一個(gè)簡(jiǎn)單的服務(wù)器。

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

  上面的代碼比較簡(jiǎn)單,使用require('http')創(chuàng)建了一個(gè)http的實(shí)例,然后使用createServer方法創(chuàng)建了一個(gè)服務(wù)器,使用listen監(jiān)聽8125端口。上面的代碼使用了鏈?zhǔn)降木幋a風(fēng)格,雖然簡(jiǎn)單但是可讀性差,變量復(fù)用性也不好,所以我們建議使用下面的編碼風(fēng)格。

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);

  現(xiàn)在的代碼就明了多了,通過?var server = http.createServer() 創(chuàng)建了服務(wù)器,并把它保存在變量server中,接下來使用server.on('request', handleReq)綁定request事件。對(duì)request事件的綁定,例1鏈?zhǔn)斤L(fēng)格的編碼并沒能直接體現(xiàn)出來。

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

  1.connection和close:分別代表建立和關(guān)閉與客戶端的tcp連接。

  2.checkContinue:當(dāng)客戶端向服務(wù)器端發(fā)送大量數(shù)據(jù)的時(shí)候,他將檢查是否可以繼續(xù),此時(shí)觸發(fā)事件。當(dāng)觸發(fā)了checkContinue事件時(shí),request事件不再觸發(fā)。

  3.upgrade:當(dāng)客戶端請(qǐng)求升級(jí)協(xié)議的時(shí)候觸發(fā),如果該事件沒有相應(yīng)的處理,服務(wù)器將拒絕升級(jí)。

  4.clientError:客戶端發(fā)生異常時(shí)觸發(fā)。

?

  http客戶端

  有時(shí)候你需要使用到向外連接的http請(qǐng)求,例如使用web服務(wù),訪問文本數(shù)據(jù)源或者抓取web站點(diǎn)信息,這時(shí)你可以使用http.ClientRequest創(chuàng)建http請(qǐng)求。先看一個(gè)例子:

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();

  我們創(chuàng)建了一個(gè)http請(qǐng)求,為響應(yīng)添加了data事件,最后使用req.end()初始化和發(fā)送我們的請(qǐng)求。

  

  創(chuàng)建http GET 請(qǐng)求

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);}); });

  這個(gè)例子和之前的例子實(shí)現(xiàn)同樣的功能,區(qū)別就在于opts對(duì)象少了method屬性,使用http.get()代替了之前的var req=http.request()和req.end()。由于返回回來的數(shù)據(jù)是2進(jìn)制數(shù)據(jù),我們需要使用response.setEncoding()實(shí)現(xiàn)編碼,所以我們需要對(duì)代碼做點(diǎn)小修改。

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發(fā)送數(shù)據(jù)

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()方法,向服務(wù)器說明我們要發(fā)送的數(shù)據(jù),最后使用req.end()初始化并發(fā)送請(qǐng)求。代碼中的res是ClientResponse對(duì)象,他有兩個(gè)重要的屬性:statusCode(狀態(tài)碼)和header(響應(yīng)頭)。

?

  URL

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

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

  執(zhí)行結(jié)果:

?

?  querystring

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

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

  執(zhí)行結(jié)果:

?  再來一例,關(guān)于encode方法。

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

  執(zhí)行結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的node.js入门 - 9.api:http的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。