Node.js中的HTTP Server对象与GET、POST请求_node.js
上一博客学习了请求与响应,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(' <h1>' + messages[idx] + '</h1>'); } res.end(' </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 2021 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 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.<anonymous> (c:UsersAdministratorDesktop odejs-mongodb-angularjs-web-development-masterch07http_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可能也不会用到,大致学一遍之后再回过头来复习学习一下。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章:
- [前端]多版本node的安装和切换详细操作步骤_node.js
- [前端]使用nvm安装|更新|切换|nodejs的命令详解_node.js
- [前端]Nodejs中koa2连接mysql的实现示例_node.js
- [前端]node安装及环境变量配置详细教程_node.js
- [前端]npm install安装报错:gyp info it worked if it ends with ok的解决方法_node.js
- [前端]整理几个关键节点深入理解nodejs_node.js
- [前端]Node.js实现链式回调_node.js
- [前端]Node.js处理I/O数据之使用Buffer模块缓冲数据_node.js
- [前端]typescript在node.js下使用别名(paths)无效的问题详解_javascript技巧
- [前端]Node.js数据流Stream之Readable流和Writable流用法_node.js
相关推荐:
- [前端]Vue3 编写自定义指令插件的示例代码_vue.js
- [前端]vue使用element实现上传图片和修改图片功能_vue.js
- [前端]JS前端架构pnpm构建Monorepo方式管理demo_JavaScript
- [前端]Iconfont不能上传如何维护Icon_React
- [前端]jquery实现手风琴展开效果_jquery
- [前端]js前端实现word excel pdf ppt mp4图片文本等文件预览_JavaScript
- [前端]uniapp实现横屏签字版_javascript技巧
- [前端]微信小程序实现手写签名(签字版)_javascript技巧
- [前端]vue 大文件分片上传(断点续传、并发上传、秒传)_vue.js
- [前端]微信小程序实现日期范围选择_javascript技巧
- 如何在 JavaScript 中把字符串转换成数字
- 怎么理解ES6中Proxy及使用场景
- 详解vuex中的this.$store.dispatch方法
- javascript的call和apply的区别
- 为什么要使用Reflect对象
- 前端一些好学好用的代码规范-git hook+husky + commitlint
- 前端一些好学好用的代码规范-git hook+husky + commitlint
- 解决报错Node Sass does not yet support your current environment: Windows 64-bit with Unsupported
- mac安装nvm
- npm husky install .git can not be found解决方案
- CSS世界PDF电子版百度云网盘下载
- JavaScript权威指南(第6版)中文版PDF电子版百度云网盘下载
- Web服务 原理与技术[Michael P. Papazoglou]PDF电子版百度云网盘下载[44.7M]
- 基于TypeScript的HTML5游戏开发本科毕业设计PDF电子版百度云网盘下载
- 详解vue修改elementUI的分页组件视图没更新问题
- javascript的call和apply的区别
- WebKit技术内幕朱永盛PDF电子版百度云网盘下载
- JAVASCRIPT语言精髓与编程实践.周爱民.扫描版PDF电子版百度云网盘下载
- 精彩绝伦的CSS[Eric A. Meyer]PDF电子版百度云网盘下载[25.8M]
- HTML5与CSS3基础教程(第8版)[Elizabeth Castro]PDF电子版百度云网盘下载[72M]