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);
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可能也不会用到,大致学一遍之后再回过头来复习学习一下。
开心档-Node.js GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。
开心档-软件开发入门之Node.js GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- 使用 Dapr JS SDK 让 Nest.js 集成 Dapr(微软开源的分布式应用程序运行时)
- YUI Compressor插件压缩后war中的js/css文件未压缩的解决方法(被maven打包顶替了)
- js中moment方法_jquery 虚拟dom
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑(html2md.js 或 html2markdown.js)
- ORA-26837: Server “string” is not an XStream inbound server ORACLE 报错 故障修复 远程处理
- SQL Server如何通过SQL语句直接操作另一台服务器上的SQL SERVER的数据
- JS动态引入js、CSS动态创建script/link/style标签详解编程语言
- sql server比较Oracle 与 SQL Server的优缺点(oracleltgt)
- 数据Node.js实现MySQL数据的同步更新(node同步mysql)
- 如何使用Node.js连接Oracle数据库(node连接oracle)
- 使用JS技术实现Oracle数据库链接(js 链接 oracle)
- JS技术连接Oracle数据库实现数据交互(js连接oracle实例)
- 妙用JS获取Oracle信息的快速方法(js获取Oracle)
- 使用JS在网页中连接Oracle数据库(js网页链接oracle)
- 使用JS控制Oracle数据库的更新(js控制oracle更新)
- JavaScript探索之旅掌握Oracle和JS的完美融合(js与oracle)
- Redis中的订阅机制及其在JS中的应用(redis 订阅 js)
- js取得当前网址
- 让按钮失效5秒的js代码
- CSS和JS标签style属性对照表(方便js开发的朋友)
- 远离JS灾难css灾难之js私有函数和css选择器作为容器
- js循环改变div颜色具体方法
- js实现select跳转功能代码
- js字符串完全替换函数分享
- 原生js事件的添加和删除的封装
- 我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码以及事件循环