博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js HTTP Server对象及GET、POST请求
阅读量:4515 次
发布时间:2019-06-08

本文共 4024 字,大约阅读时间需要 13 分钟。

上一博客学习了请求与响应,2次读2次写,但有一个问题就是客户端写入的时候怎么知道请求到达。所以HTTP Server对象出现了。它提供了实现HTTP服务器的基本框架。它可以监听端口的底层套接字和接收请求,然后发送响应给客户端连接的处理程序。

它提供了一下几个事件:

request:当服务器收到客户端请求时触发。例如:function callback(request,response){}.

connection:当一个新的TCP流建立时触发。例如:function callback (socket)

close:服务器关闭时触发,回调不接收参数。

checkContinue:当收到包括期待的100-continue标头的请求时触发。即使不处理此事件,默认的事件处理程序也响应。例如:function callback(request,response){}

connect:接收到HTTP CONNECT请求时发出。callback接收request、response、head。例如:function callback(request,response,head)

upgrade:当客户端请求HTTP升级时发出。function callback (request,response,head)

clientError:当客户端连接套接字发出一个错误时发出。function callback(error,socket){}

要启动HTTP服务器,首先使用createServer([requestListener])方法创建对象然后通过listen(port,[hostname],[backlog],[callback]).

port:端口

hostname:主机名

backlog(积压):指定被允许进行排队的最大待处理连接数。默认511.

callback(回调):指定该服务器已经开始在指定的端口监听时,要执行的回调处理程序。

对于文件系统的连接可以用下面的两种方法:

listen(path,[callback]):文件路径

listen(handle,[callback]):接收一个已经打开的文件描述符句柄。

如果要停止监听可以使用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('Simple HTTP Server');  res.write('');  for (var idx in  messages){    res.write('\n

' + messages[idx] + '

'); } res.end('\n');}).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();
Response Status: 200Response Headers: { 'content-type': 'text/html',  date: 'Mon, 28 Mar 2016 12:51:06 GMT',  connection: 'close',  'transfer-encoding': 'chunked' }Simple HTTP Server

Hello World

From a basic Node.js server

Take Luck

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();
Raw Response: {"message":"Hello Bilbo","question":"Are you a good Burglar?"}Message: Hello BilboQuestion: 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.
(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这块基本学了一下,对于HTTPS的话可以用HTTPS的客户端和服务端,和HTTP的差别不大,就是多了几个选项.

对于更底层的socket、tcp、udp这些就先跳过,这些做web可能也不会用到,大致学一遍之后再回过头来复习学习一下。

转载于:https://www.cnblogs.com/5ishare/p/5330614.html

你可能感兴趣的文章
hashCode方法的使用
查看>>
P1262 间谍网络
查看>>
机器不学习:初识迁移学习
查看>>
进程和程序的区别?
查看>>
第三十八篇、给UITabBar按钮的动画效果
查看>>
vmware虚拟机Centos安装samba全过程
查看>>
win10 连不上某一其他电脑都连得上的wifi
查看>>
异步与多线程的区别 线程安全 (总结)
查看>>
程序员为什么热衷造轮子?
查看>>
有关排序的贪心策略的一种证明思想
查看>>
异常继承限制
查看>>
POJ 1083 Moving Tables
查看>>
用Android-X86和VirtualBox打造高性能Android开发环境
查看>>
【机器学习】粗糙集属性约简算法与mRMR算法的本质区别
查看>>
【Luogu4921】情侣?给我烧了!(组合计数)
查看>>
关于html中对换行的处理
查看>>
Influence Maximazation
查看>>
二叉查找树
查看>>
screen乱码问题
查看>>
Java HashSet的元素内容变化导致的问题
查看>>