用 Nodejs 实现 Http 服务版本的 Hello world

开发 前端
Nodejs 提供了 Http 模块,可以让我们比较便捷地创建 Http 服务,但因为涉及到的类和 API 也比较多,所以实际上更多会使用封装后的Web 框架,比如 Express、Nestjs。

大家好,我是前端西瓜哥,今天我们来学习 nodejs,用 nodejs 写一个简单 http 服务版本的 "hello world"。

http.createServer

我们需要用到 nodejs 的 http 模块。

http 模块包含了和 http 相关的一些方法,我们需要用到 http.createServer 方法,它用于创建一个 http 服务,并返回 http.Server 实例对象。

http.createServer 方法接受两个参数:

  1. 配置对象 options,可选。比如可以配置请求超时时间 requestTimeout。
  2. 监听请求函数,可选。当接收到请求时,我们可以通过该函数拿到请求对象 req 和响应对象 res。req 是http.IncomingMessage 实例对象,res 则是 http.ServerResponse 实例对象, http.ServerResponse  继承自 http.OutgoingMessage 类。

然后返回一个 http.Server 实例对象,http.Server 继承自 net.Server。

http 模块涉及相当多的类,需要注意区分。

const http = require('http');

const server = http.createServer((req, res) => {
// ...
})

对于 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 服务。

const http = require('http');

http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World!\n');
}).listen(3200);

很简单。我们先用 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。

责任编辑:姜华 来源: 前端西瓜哥
相关推荐

2020-03-25 14:40:45

语言编程语言Hello

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2009-09-28 14:49:08

Spring DMOSGi服务

2009-08-11 10:32:23

什么是Groovy

2009-09-16 17:15:19

OSGi Bundle

2023-01-06 08:18:44

2009-07-30 13:21:17

Scala入门Hello World

2011-06-08 14:39:06

Qt 教程

2023-09-04 07:30:03

Wasm汇编语言

2012-02-20 14:26:48

JavaPlay Framew

2017-06-26 08:55:52

2015-10-27 09:47:11

2023-05-23 08:01:10

Netty网络通信

2021-11-26 08:22:01

Java动态开发

2011-08-05 09:48:46

iPhone Interface

2009-08-14 16:54:19

C# Hello Wo

2024-04-11 13:13:27

2014-04-11 11:36:42

NDKAndroid开发终端

2011-11-21 14:10:53

C#
点赞
收藏

51CTO技术栈公众号