当前位置: 首页 > 后端技术 > Node.js

NodeJs简明教程(三)

时间:2023-04-03 20:31:33 Node.js

NodeJs简明教程将从零开始学习NodeJs相关知识,帮助JS开发者搭建全栈开发技术栈!本文为NodeJs简明教程的第三篇,将介绍NodeJs自带的HTTP模块服务器相关的基本操作。HTTP模块的介绍是官方正文[1]:Node.js中的HTTP接口旨在支持该协议的许多传统上难以使用的特性。特别是大的、可能是块编码的消息。该接口小心不要缓冲整个请求或响应——用户能够流式传输数据。大致的意思是:NodeJs的HTTP模块就是为了支持很多传统HTTP协议难以使用的功能,让这些功能或者特性可以通过简单的API来调用。HTTP模块服务器开发代码示例下面是最简单的NodeJsHTTP服务器示例:Newindex.jsencodingconsthttp=require('http');constserver=http.createServer((req,res)=>{console.log('%s%s',req.method,req.url)res.end(JSON.stringify(req.headers))})server.listen(8080,()=>console.log('listenon8080'))打开终端或控制台,执行nodeindex.js,终端或控制台会输出listenon8080,此时HTTP服务器已经启动次,如果启动失败,可以在下方留言,打开浏览器访问http://localhost:8080,笔者输出如下:{"host":"localhost:8080","connection":"keep-alive","cache-control":"max-age=0","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36","dnt":"1","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-encoding":"gzip,deflate,br","accept-language":"zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",}代码说明NodeJs采用CMD模块系统,require用于加载模块,本例中添加加载NodeJs自带的http模块使用函数http.createServer创建HTTP服务器,并配置请求回调函数。本系列第一篇文章中说事件驱动需要监听server的回调函数。listen为监听系统端口,第二个参数为监听成功的回调函数req对象。服务器收到的HTTP请求对象。以下是常用的属性或方法:req.url本次请求的路径(不含域名)req.headers本次请求的请求头req.httpVersion本次请求的HTTP协议版本号req.method的请求方法本次请求,包括GET/POST/PUT等on()监听请求体数据POST/PUT/PATCH方法会有一个请求体res对象。res对象是req请求对象对应的response对象。HTTP协议设计是一种请求-响应模型,一个请求对应一个响应。以下是常用的属性或方法:res.writeHead输出响应状态码,状态码描述和多个HTTP响应头res.end输出数据并结束本次响应res.write输出部分内容(chunk)res.setHeader输出单个响应Header请求路由NodeJs自带的HTTPserver没有路由功能,也就是说根据请求的URI执行不同的逻辑需要开发者手动做consthttp=require('http');constserver=http.createServer((req,res)=>{if(req.url==='/'){res.end('index');返回;}if(req.url==='/user'){res.end('user');return;}})server.listen(8080,()=>console.log('listenon8080'));执行nodeindex.js浏览器访问http://localhost:8080/会输出index浏览器访问http://localhost:8080/user会输出用户读取请求参数readGET请求参数consthttp=require('http');consturl=require('url');constqs=require('querystring');constserver=http.createServer((req,res)=>{constparsed=url.parse(req.url);constquery=qs.parse(parsed.query);res.end(JSON.stringify(query));})server.listen(8080,()=>console.log('监听8080'));执行nodeindex.js浏览器访问[http://localhost:8080/?a=x&b=2&c[]=1&c[]=2](http://localhost:8080/?a=x&b=2&c[]=1&c[]=2)显示{"a":"x","b":"2","c[]":["1","2"]}读取请求体参数在HTTP协议规范中,POST/PUT/PATCH可以携带请求体。NodeJsHTTP服务器接收请求体代码如下:consthttp=require('http');consturl=require('url');constqs=require('querystring');constserver=http.createServer((req,res)=>{letdata=Buffer.alloc(0);req.on('data',(buffer)=>{data=Buffer.concat([data,buffer]);})req.on('end',()=>{res.end(data.toString())})})server.listen(8080,()=>console.log('监听8080'));执行nodeindex.js,使用postman发送POST请求http://localhost:8080。在这个例子中,POST请求体是a=1&b=2postman会返回a=1&b=2Conclusion一个简单的HTTP服务器到此结束。当然这种方式在实际生产中使用的很少,几乎都是使用框架来开发,以提高开发效率。欢迎关注Nodejs之路公众号持续更新和在线问答帮助。