http模块是nodejs中非常重要的一部分,用于开启一个服务,我们可以用它自定义接口供客户端使用。
 
开启服务的方式也比较简单,几行代码就可以搞定
const http = require('http')

const server = http.createServer((req, res)=>{
res.end('hello world')
}) server.listen('8000', ()=> {console.log('8000端口已启动~')}) // 在命令行工具中输入 node [当前的文件名] 即可启动,启动成功后在命令行工具输出:8000端口已启动~
 
 
通过 createServer 创建服务时,传入的回调函数里的两个参数分别是request和result即请求和响应,request里有很多和请求相关的参数。
常用的属性是url、method和headers即请求的链接,方法和头部信息,头部信息里又包括了主机名、可接受压缩的形式、请求类型、请求长度等等。
http模块需要根据这些信息进行不同的请求处理,从而给客户端返回相对应的结果。用postman模拟发送post请求,打印的request的三个参数如下图所示。
 
 
get请求的参数可以通过url直接获取,并对数据进行处理,而post请求的参数是放在body中的,不能直接通过header获取,需要通过 req.on来监听参数的内容,获取到的数据类型默认是 Buffer,可以通过req.setEncoding设置为需要的数据类型,utf-8、binary等,或者通过Buffer数据toString()方法可以转换成 utf-8的编码形式

const server = http.createServer((req, res)=>{
console.log('req.url:', req.url) req.on('data', data=>{
console.log('post请求的data: ',data.toString())
})
res.end('hello world')
})
 
http的请求和响应是以数据流的形式传递的,响应可以通过 end方法来写入响应内容并关闭流,默认是相应格式为text类型,如果需要传递其他类型的响应结果,需要通过setHeader或者writeHead来定义Content-Type,Content-Type默认是 text/plain,即文本,更改为 text/html 即下图展示的html渲染方式
const server = http.createServer((req, res)=>{
res.setHeader("Content-Type", "text/html")
res.end('<h1>hello node</h1>')
})

http模块可以开启一个服务,用来处理客户端发送过来的http请求,同时,它也可以发送http请求,get请求和post请求接收响应的相同点在于都需要通过on来监听data,从回调函数中获取响应结果,不同点在于post请求还需要监听请求结束的end方法,当end方法执行时,再关闭此次post请求。
 
const http = require('http')

// get请求监听data方法
http.get('http://localhost:8000', (res)=>{
res.on('data', data=>{
console.log('get请求的响应:', data.toString())
})
}) // post请求还需监听end方法,以及关闭请求
const req = http.request({
method: 'post',
port: 8000,
hostname: 'localhost'
}, res=>{
res.on('data', data=>{
console.log('post请求的响应:',data)
}) res.on('end', ()=>{
console.log('post请求获取到了所有请求结果')
})
}) req.end()

 
http模块的复杂点在于处理请求参数,get请求的参数通过字符串解析url就可以,post请求需要根据上传类型来进行区分,上传的是json数据、urlencoded还是文件,解析的方式都不相同,所以通常会使用框架来简化我们的编码流程, express和koa都极大的简化了逻辑的处理过程。
 
 

nodejs中如何使用http创建一个服务的更多相关文章

  1. nodejs中使用worker_threads来创建新的线程

    目录 简介 worker_threads isMainThread MessageChannel parentPort和MessagePort markAsUntransferable SHARE_E ...

  2. 创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。

    创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息. <html> & ...

  3. springboot创建一个服务,向eureka中注册,使用swagger2进行服务管理

    首先pom.xml文件,spring boot.springcloud版本很麻烦,容易出问题 <?xml version="1.0" encoding="UTF-8 ...

  4. 写入数据到Plist文件中时,第一次要创建一个空的数组,否则写入文件失败

    #pragma mark - 保存数据到本地Plist文件中 - (void)saveValidateCountWithDate:(NSString *)date count:(NSString *) ...

  5. SpringCloud学习6-如何创建一个服务消费者consumer

    上一节如何创建一个服务提供者provider已经启动了一个provider的server,提供用户信息查询接口.接下来,我们启动另一个provider,由于是同一台机器本地测试,我们换一个端口 --s ...

  6. 为Web页中的Table对象创建一个映射表

    HTML对象中的TABLE是我们常用的网页元素,在DHTML编程中,我们可以通过它的rows和cells方法方便的访问表格对象里面的每一个单元格,而且表格对象(table)的每个单元行(tr)和每个单 ...

  7. 【Blazor】在ASP.NET Core中使用Blazor组件 - 创建一个音乐播放器

    前言 Blazor正式版的发布已经有一段时间了,.NET社区的各路高手也创建了一个又一个的Blazor组件库,其中就包括了我和其他小伙伴一起参与的AntDesign组件库,于上周终于发布了第一个版本0 ...

  8. Angular2快速入门-4.创建一个服务(创建NewsService提供数据)

    上篇我们使用的数据是通过mock-news.ts中的const News[] 数组直接赋给Component 组件的,这篇我们把提供数据的部分单独封装成服务 第一.创建news.service.ts ...

  9. 在eclipse中,用maven创建一个web项目工程

    1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点 ...

  10. [转]在eclipse中,用maven创建一个web项目工程

    1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点 ...

随机推荐

  1. CSS绘制虚线的方案

    一.实现效果 二.代码实现 <div class="line"></div> .line { width: 1px; /* 虚线宽度 */ backgrou ...

  2. 2020-11-23:go中,s是一个字符串,s[0]代表什么?是否等于固定字节数?

    福个答案2020-11-23:Golang 的字符串(string)是合法的 UTF-8 序列,这就涉及到了两种不同的遍历方式,一种是按照 Unicode 的 codepoint 遍历,另一种是把 s ...

  3. Sentinel基本使用与源码分析

    系列文章目录和关于我 一丶什么是Sentinel Sentinel官网 Sentinel 是面向分布式.多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由.流量控制.流量整形.熔断降级 ...

  4. SpringBoot 使用 Sa-Token 完成路由拦截鉴权

    一.需求分析 在前文,我们详细的讲述了在 Sa-Token 如何使用注解进行权限认证,注解鉴权虽然方便,却并不适合所有鉴权场景. 假设有如下需求:项目中所有接口均需要登录认证校验,只有 "登 ...

  5. 2023-05-24:为什么要使用Redis做缓存?

    2023-05-24:为什么要使用Redis做缓存? 答案2023-05-24: 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处. 假设你在超市里买了一箱啤酒,如果你需要每次想喝啤酒就去超 ...

  6. flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED

    最近有个flutter项目中根据搜索结果跳转到相应的H5页面发现老是报错,曾现在闲暇拉出来解决哈 先来看一个搜索功能的测试 已进入详情页面就提示错误,尴尬了. 只有去检测代码了撒 Search.dar ...

  7. 第一单元 .Net 平台介绍

    第一单元 .Net 平台介绍 学习编程,电脑基本配置(当然配置越高越好): 内存 :初期学习8 G,后期可能跟不上, 最好16 G以上 硬盘:500 G,5400 转速,至少C盘是固态,全是固态最好 ...

  8. JeeCms低代码开发平台了解及认知以及遇到的问题

    1.jeecms低代码开发平台自带标签,使用的标签延续freemarker标签或基于freemarker标签自定的标签(类似自jsp自定义标签) (1)什么是freemarker标签: FreeMar ...

  9. 项目小结:使用Docker迁移服务到离线服务器

    前言 最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很慢,遇到不少坑,本文记录一下迁移过程. 基本信息 原本这套系统也 ...

  10. httpx的两个坑(httpx.ReadTimeout; SSL: CERTIFICATE_VERIFY_FAILED)

    关于python异步网络请求库httpx的两个坑 其一:httpx.ReadTimeout 实测发现,网络不稳定的情况下,极其容易出现该错误. 相对于requests库, httpx库是有默认的超时时 ...