Node.js HTTP Server对象及GET、POST请求

简介:

上一博客学习了请求与响应,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('<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();

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


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这块基本学了一下,对于HTTPS的话可以用HTTPS的客户端和服务端,和HTTP的差别不大,就是多了几个选项.

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


相关文章
|
9月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
857 130
|
10月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
874 2
|
10月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
10月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
11月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
385 0
|
Web App开发 JavaScript 测试技术
Node.js安装和入门 - 2行代码让你能够启动一个Server
转自:http://josh-persistence.iteye.com/blog/1979552  备忘       Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScript运行。
1069 0
|
11月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
3457 11
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
1253 155
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
14852 23