大家好,我是前端西瓜哥,今天我们来学习 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
。
代码语言:javascript复制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 服务。
代码语言:javascript复制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。
我是前端西瓜哥,欢迎关注我,学习更多前端知识。