Node.js使用http模块创建Web服务器

文章目录

  • 前言
  • 一、导入http模块
  • 二、创建服务器对象
    • http.createServer()
    • listen()
    • close()
  • 三、创建请求、响应对象
    • 请求对象req
    • 响应对象res

前言

        Node.js核心模块——http模块,用以创建Web服务器,从而对外提供Web资源服务。本章简明扼要地阐述使用http模块内置http.createServer()方法实例化http.Server类,并创建请求、响应对象,搭建简单的Web服务器。完整API参照官方文档:http 超文本传输协议 | Node.js API 文档


一、导入http模块

        我们通过以下方式来引入该模块:

const http = require('http');

二、创建服务器对象

http.createServer()

        通过http模块内置方法:http.createServer(),创建一个新的服务器时,将会实例化http.Server类,从而创建一个服务器对象

// 导入http模块
const http = require('http');
// 创建Web服务器对象
const server = http.createServer();

        如上:当要有了服务器对象server后,便可以访问其方法:listen()与close()

listen()

        服务器对象通过.listen(端口号, 回调)方法启动HTTP服务器:

// 导入http模块
const http = require('http');
// 创建Web服务器对象
const server = http.createServer();
// 监听端口号5005并启动HTTP服务器
server.listen(5005, () => {
    console.log('Web服务器启动成功啦!')
})

        终端输入node指令启动服务器:

close()

        同理,服务器对象通过调用.close([callback])方法,停止服务器并不再接受新的连接

三、创建请求、响应对象

        当创建完服务器对象并可以通过listen()设置端口启动服务器后,我们需要监听客户端发来的请求,并且还需要向客户端做出响应,我们可以使用node.js事件触发器.on()方法为服务器对象绑定request事件,当客户端访问服务器时,触发事件处理函数:

// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数
server.on('request', (req, res) => {
    console.log('Web服务器被访问啦!')
})

        我们通过浏览器输入本地服务器地址检验:

请求对象req 

        当服务器实例监听request事件时,将会创建类http.IncomingMessage的实例对象,通常叫做请求对象req,作为事件处理函数的第一个参数,用来访问与客户端请求相关的数据和属性,如:

  • 使用 statusCode 和 statusMessage 方法来访问状态。
  • 使用 headers 方法或 rawHeaders 来访问消息头。
  • 使用 method 方法来访问 HTTP 方法。
  • 使用 httpVersion 方法来访问 HTTP 版本。
  • 使用 url 方法来访问 URL。
  • 使用 socket 方法来访问底层的 socket。

        例如:

// 导入http模块
const http = require('http');
// 创建Web服务器实例
const server = http.createServer();
// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数
server.on('request', (req, res) => {
    // req.httpVersion访问http版本
    const version = req.httpVersion;
    // req.url访问客户端请求的 URL 地址
    const url = req.url;
    // req.method访问客户端请求的 method 类型
    const method = req.method;
    const str = `Your request url is ${url}, request method is ${method} and httpVersion is ${version}`;
    console.log(str);
})
// 服务器实例通过.listen(端口号, 回调)方法启动Web服务器
server.listen(5005, () => {
    console.log('Web服务器启动成功啦!')
})

        启动服务器并访问url为post的地址:

 

响应对象res

        同理,http.ServerResponse类也会创建实例对象,通常称作响应对象res,作为事件处理函数的第二个参数,在事件处理函数中,响应对象res通过调用end()方法用于将服务器的数据或属性响应给客户端,如:

// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数
server.on('request', (req, res) => {
    const version = req.httpVersion;
    const url = req.url;
    const method = req.method;
    const str = `Your request url is ${url}, request method is ${method} and httpVersion is ${version}`;
    // 调用res.end()方法向客户端响应一些内容
    res.end(str);
})

        启动并访问服务器即可收到响应数据字符串:

Node.js使用http模块创建Web服务器_第1张图片

         同时,该对象提供一些方法与HTTP消息头进行交互,如我们可以通过res.setHeader('Content-Type', 'text/html; charset=utf-8'),规定编码格式,解决响应中文乱码。

const testChinese = '测试中文乱码!'; // 若不设置响应头将会乱码
// 设置响应头,解决中文乱码
res.setHeader('Content-Type', 'text/html; charset=utf-8');
// 调用res.end()方法向客户端返回中文字符串
res.end(testChinese);

你可能感兴趣的:(前端,node.js)