欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js中的HTTP?Server對象與GET、POST請求

 更新時間:2022年07月06日 11:33:37   作者:社會主義接班人  
這篇文章介紹了Node.js中的HTTP?Server對象與GET、POST請求,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

上一博客學(xué)習(xí)了請求與響應(yīng),2次讀2次寫,但有一個問題就是客戶端寫入的時候怎么知道請求到達。所以HTTP Server對象出現(xiàn)了。它提供了實現(xiàn)HTTP服務(wù)器的基本框架。它可以監(jiān)聽端口的底層套接字和接收請求,然后發(fā)送響應(yīng)給客戶端連接的處理程序。

它提供了一下幾個事件:

  • request:當服務(wù)器收到客戶端請求時觸發(fā)。例如:function callback(request,response){}.
  • connection:當一個新的TCP流建立時觸發(fā)。例如:function callback (socket)
  • close:服務(wù)器關(guān)閉時觸發(fā),回調(diào)不接收參數(shù)。
  • checkContinue:當收到包括期待的100-continue標頭的請求時觸發(fā)。即使不處理此事件,默認的事件處理程序也響應(yīng)。例如:function callback(request,response){}
  • connect:接收到HTTP CONNECT請求時發(fā)出。callback接收request、response、head。例如:function callback(request,response,head)
  • upgrade:當客戶端請求HTTP升級時發(fā)出。function callback (request,response,head)
  • clientError:當客戶端連接套接字發(fā)出一個錯誤時發(fā)出。function callback(error,socket){}

要啟動HTTP服務(wù)器,首先使用createServer([requestListener])方法創(chuàng)建對象然后通過listen(port,[hostname],[backlog],[callback]).

  • port:端口
  • hostname:主機名
  • backlog(積壓):指定被允許進行排隊的最大待處理連接數(shù)。默認511.
  • callback(回調(diào)):指定該服務(wù)器已經(jīng)開始在指定的端口監(jiān)聽時,要執(zhí)行的回調(diào)處理程序。

對于文件系統(tǒng)的連接可以用下面的兩種方法:

  • listen(path,[callback]):文件路徑
  • listen(handle,[callback]):接收一個已經(jīng)打開的文件描述符句柄。

如果要停止監(jiān)聽可以使用close([callback])方法。

上面了解了下HTTP Server對象,下面用GET、POST實驗一下。

GET:

var http = require('http');
var messages = [
  'Hello World',
  'From a basic Node.js server',
  'Take Luck'];
http.createServer(function (req, res) {
  res.setHeader("Content-Type", "text/html");
  res.writeHead(200);
  res.write('<html><head><title>Simple HTTP Server</title></head>');
  res.write('<body>');
  for (var idx in  messages){
    res.write('\n<h1>' + messages[idx] + '</h1>');
  }
  res.end('\n</body></html>');
}).listen(8080);

var options = {
    hostname: 'localhost',
    port: '8080',
  };
function handleResponse(response) {
  var serverData = '';
  response.on('data', function (chunk) {
    serverData += chunk;
  });
  response.on('end', function () {
    console.log("Response Status:", response.statusCode);
    console.log("Response Headers:", response.headers);
    console.log(serverData);
  });
}
http.request(options, function(response){
  handleResponse(response);
}).end();

 輸出結(jié)果:

Response Status: 200
Response Headers: { 'content-type': 'text/html',
  date: 'Mon, 28 Mar 2016 12:51:06 GMT',
  connection: 'close',
  'transfer-encoding': 'chunked' }
<html><head><title>Simple HTTP Server</title></head><body>
<h1>Hello World</h1>
<h1>From a basic Node.js server</h1>
<h1>Take Luck</h1>
</body></html>

POST:

var http = require('http');
http.createServer(function (req, res) {
  var jsonData = "";
  req.on('data', function (chunk) {
    jsonData += chunk;
  });
  req.on('end', function () {
    var reqObj = JSON.parse(jsonData);
    var resObj = {
      message: "Hello " + reqObj.name,
      question: "Are you a good " + reqObj.occupation + "?"
    };
    res.writeHead(200);
    res.end(JSON.stringify(resObj));
  });
}).listen(8088);


var http = require('http');
var options = {
  host: '127.0.0.1',
  path: '/',
  port: '8088',
  method: 'POST'
};
function readJSONResponse(response) {
  var responseData = '';
  response.on('data', function (chunk) {
    responseData += chunk;
  });

  response.on('end', function () {
    var dataObj = JSON.parse(responseData);
    console.log("Raw Response: " +responseData);
    console.log("Message: " + dataObj.message);
    console.log("Question: " + dataObj.question);
  });
}
var req = http.request(options, readJSONResponse);
req.write('{"name":"Bilbo", "occupation":"Burglar"}');
req.end();

輸出結(jié)果:

Raw Response: {"message":"Hello Bilbo","question":"Are you a good Burglar?"}
Message: Hello Bilbo
Question: Are you a good Burglar?

第一次使用的時候用的端口號是8080,然后就報下面的錯誤.換一下端口號就OK了。

events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8080
    at Object.exports._errnoException (util.js:870:11)
    at exports._exceptionWithHostPort (util.js:893:20)
    at Server._listen2 (net.js:1236:14)
    at listen (net.js:1272:10)
    at Server.listen (net.js:1368:5)
    at Object.<anonymous> (c:\Users\Administrator\Desktop\nodejs-mongodb-angularjs-web-development-master\ch07\http_server_post.js:16:4)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)

以上基本把HTTP這塊基本學(xué)了一下,對于HTTPS的話可以用HTTPS的客戶端和服務(wù)端,和HTTP的差別不大,就是多了幾個選項.

對于更底層的socket、tcp、udp這些就先跳過,這些做web可能也不會用到,大致學(xué)一遍之后再回過頭來復(fù)習(xí)學(xué)習(xí)一下。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node.JS md5加密中文與php結(jié)果不一致的解決方法

    node.JS md5加密中文與php結(jié)果不一致的解決方法

    本篇文章主要介紹了node.JS md5加密中文與php結(jié)果不一致的解決方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Node.js的Express框架使用上手指南

    Node.js的Express框架使用上手指南

    這篇文章主要介紹了Node.js的Express框架使用上手指南,Express可以說是目前Node世界中人氣最高的開發(fā)框架,需要的朋友可以參考下
    2016-03-03
  • 什么時候不能在 Node.js 中使用 Lock Files

    什么時候不能在 Node.js 中使用 Lock Files

    這篇文章主要介紹了什么時候不能在 Node.js 中使用 Lock Files,但是當你在開發(fā)要發(fā)布到 npm 的包時,應(yīng)避免使用這類 lock file 。下面我們來一起了解一下吧
    2019-06-06
  • 解決Nodejs全局安裝模塊后找不到命令的問題

    解決Nodejs全局安裝模塊后找不到命令的問題

    今天小編就為大家分享一篇解決Nodejs全局安裝模塊后找不到命令的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 快速掌握Node.js事件驅(qū)動模型

    快速掌握Node.js事件驅(qū)動模型

    這篇文章主要為大家詳細介紹了Node.js事件驅(qū)動模型,首先了解一下傳統(tǒng)的線程網(wǎng)絡(luò)模型,然后再學(xué)習(xí)了解Node.js事件驅(qū)動模型,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Node.js工具庫yeoman使用介紹

    Node.js工具庫yeoman使用介紹

    這篇文章主要為大家介紹了Node.js工具庫yeoman的使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • nvm、nrm、npm 安裝和使用詳解(小結(jié))

    nvm、nrm、npm 安裝和使用詳解(小結(jié))

    這篇文章主要介紹了nvm、nrm、npm 安裝和使用詳解(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 一文帶你了解前端包管理工具npm、yarn和pnpm

    一文帶你了解前端包管理工具npm、yarn和pnpm

    如果您是前端開發(fā)人員,您將接觸到一些包管理工具,包管理工具是連續(xù)自動化程序的集合,例如安裝、升級、配置和刪除程序,下面這篇文章主要給大家介紹了關(guān)于前端包管理工具npm、yarn和pnpm的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Node.js查詢MySQL并返回結(jié)果集給客戶端的全過程

    Node.js查詢MySQL并返回結(jié)果集給客戶端的全過程

    nodejs最大的優(yōu)勢也是大家用著最為難以理解的一點,就是它的異步功能,它幾乎所有的io操作都是異步的,這也就導(dǎo)致很多人不理解也用不習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于Node.js查詢MySQL并返回結(jié)果集給客戶端的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Node.js全局可用變量、函數(shù)和對象示例詳解

    Node.js全局可用變量、函數(shù)和對象示例詳解

    JavaScript中有一個特殊的對象,稱為全局對象(Global Object),它及其所有屬性都可以在程序的任何地方訪問,即全局變量,下面這篇文章主要給大家介紹了關(guān)于Node.js全局可用變量、函數(shù)和對象的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評論