当前栏目
用 Nodejs 实现 Http 服务版本的 Hello world
大家好,我是前端西瓜哥,今天我们来学习 nodejs,用 nodejs 写一个简单 http 服务版本的 "hello world"。
http.createServer
我们需要用到 nodejs 的 http 模块。
http 模块包含了和 http 相关的一些方法,我们需要用到 http.createServer 方法,它用于创建一个 http 服务,并返回 http.Server 实例对象。
http.createServer 方法接受两个参数:
- 配置对象 options,可选。比如可以配置请求超时时间 requestTimeout。
- 监听请求函数,可选。当接收到请求时,我们可以通过该函数拿到请求对象 req 和响应对象 res。req 是http.IncomingMessage 实例对象,res 则是 http.ServerResponse 实例对象, http.ServerResponse 继承自 http.OutgoingMessage 类。
然后返回一个 http.Server 实例对象,http.Server 继承自 net.Server。
http 模块涉及相当多的类,需要注意区分。
对于 req 请求对象,我们可以拿到请求内容,比如:
- req.headers :对象形式的请求头字段(key 会转换为小写)。
- req.method:请求方法,如 "Get"。
对于 res 响应对象,我们可以通过它来设置响应信息,比如:
- res.writeHead:writeHead 方法用于设置状态码(如 200)、状态消息(如 "OK")以及响应头字段。主要注意的是,有些头字段是 nodejs 自己加的,比如 date。
- res.setHeader:设置单个响应头字段,但必须在 res.writeHead 前执行。
- res.getHeaders:返回最终设置出来的响应头对象,可用于调试。
- res.write:设置响应体内容、编码类型,可以多次调用,新内容会接到末尾。
- res.end:该方法表示响应头和请求体已经设置完成,响应就会发出去,这个方法是必须要调用的。可以传入内容参数设置响应体,相当于顺手再做了一下 res.write 的工作。
然后是 http.createServer 返回的 http.Server 实例对象。它用于控制了这个特定 http 服务,比如:
- server.close :该方法可以关闭当前 http 服务。具体是先不再接受新的请求,然后正在处理的请求都处理完后,才真正关闭,并触发 close 事件。
- server.listen:监听请求连接,常见的用法是指定一个端口号。
Hello World!
现在我们来实现一个会返回 Hello World! 的 http 服务。
很简单。我们先用 http.createServer 创建一个 http 服务。
传入一个请求函数,这个函数会在发生请求时拿到 res 响应对象,然后使用 res.writeHead 设置状态码 200,以及必要的头字段。
我们返回的数据是纯文本类型,所以设置 Content-Type 为 'text/plain'。这个需要根据你自己的需求选择 MIME,比如 HTML 用 text/html。
然后用 res.end 表示设置完成,并带上 'Hello World!\n' 作为请求体。
最后我们给 http.createServer 方法返回的对象执行 listen 方法,监听 3200 端口。
然后我们访问 http://localhost:3200/,就能看到 Hello World! 了。
结尾
Nodejs 提供了 http 模块,可以让我们比较便捷地创建 http 服务,但因为涉及到的类和 API 也比较多,所以实际上更多会使用封装后的Web 框架,比如 Express、Nestjs。
相关文章
- 用 Nodejs 实现 Http 服务版本的 Hello world
- 在 Go 语言中使用 exec 包执行 Shell 命令
- React Context源码是怎么实现的呢
- 细说react源码中的合成事件
- react源码解析18事件系统4
- 您应该忘记的事件响应中的反模式
- 时间序列分解:将时间序列分解成基本的构建块
- react源码解析17.context4
- 前端leetcde算法面试套路之双指针4
- 前端leetcde算法面试套路之二叉树4
- 全面掌握软件架构的守护神-ArchUnit
- 配置化表单FormRender初尝试
- Redis大Key多Key拆分方案,你学会了吗?
- 使用 VS Code、Hardhat 和 Slither 进行智能合约审计
- Selenium中常用定位器Xpath的完整使用指南
- 原生JS手写丝滑流畅的元素拖拽效果
- 现代 CSS 指南 -- At-Rule 规则必知必会
- 学会这 29 个 函数,你就是 Pandas 专家
- 基于Module Federation的模块化跨栈方案探索
- 有图解有案例,我终于把Condition的原理讲透彻了