使用Node.js内置的http模块创建简单的HTTP服务器,并根据请求的路径返回不同的文本响应。

创建一个简单的HTTP服务器,它只处理GET请求,并根据请求的路径返回不同的文本响应。对于非GET请求,服务器会返回"Method Not Allowed"的响应。

复制代码
const http = require('http');  
  
const server = http.createServer((request, response) => {  
    response.setHeader('Content-Type', 'text/html;charset=utf-8');  
  
    let { method, url } = request;  
    let pathname = new URL(url, 'http://127.0.0.1').pathname;  
  
    if (method === 'GET') {  
        if (pathname === '/login') {  
            response.end('登录页面'); 
        } else if (pathname === '/reg') {  
            response.end('注册页面');  
        } else {  
            response.statusCode = 404;  
            response.end('Not Found');  
        }  
    } else {  
        response.statusCode = 405;  // 对于非GET请求,设置HTTP状态码为405(方法不允许)  
        response.end('Method Not Allowed');  
    }  
});  
  
server.listen(9000, () => {  
    console.log('启动成功!');  
});

Node.js HTTP服务器代码中各段代码的详细解释:

|---|---------------------------------|
| | const http = require('http'); |

  • 这行代码导入了Node.js内置的http模块。http模块提供了创建HTTP服务器的能力。

|---|-------------------------------------------------------------|
| | const server = http.createServer((request, response) => { |

  • 这行代码使用http.createServer方法创建了一个新的HTTP服务器。这个方法接受一个回调函数作为参数,该回调函数有两个参数:requestresponserequest对象包含了客户端发来的请求信息,而response对象则用于向客户端发送响应。

|---|------------------------------------------------------------------|
| | response.setHeader('Content-Type', 'text/html;charset=utf-8'); |

  • 在响应发送给客户端之前,这行代码设置了响应的Content-Type头部,指定响应的内容类型为HTML,并指定了字符编码为UTF-8。这确保了客户端能够正确地解析和显示服务器发送的HTML内容。

|---|----------------------------------|
| | let { method, url } = request; |

  • 这行代码使用了ES6的解构赋值语法,从request对象中提取了methodurl属性。method属性包含了HTTP请求的方法(如GET、POST等),而url属性包含了请求的URL。

|---|-------------------------------------------------------------|
| | let pathname = new URL(url, 'http://127.0.0.1').pathname; |

  • 这行代码创建了一个新的URL对象,该对象表示了请求的完整URL。由于url属性只包含了路径和查询字符串部分(没有协议和主机名),因此我们需要提供一个基础URL(在这个例子中是http://127.0.0.1)来构建完整的URL。然后,我们从这个完整的URL中提取了pathname属性,它表示请求的路径部分(不包括查询字符串)。

|---|---------------------------|
| | if (method === 'GET') { |

  • 这行代码开始了一个条件语句,检查HTTP请求的方法是否为GET。GET方法通常用于请求服务器发送某个资源。

|---|------------------------------------------------|
| | if (pathname === '/login') { |
| | response.end('登录页面'); |
| | } else if (pathname === '/reg') { |
| | response.end('注册页面'); |
| | } else { |
| | response.statusCode = 404; // 设置HTTP状态码为404 |
| | response.end('Not Found'); |
| | } |

  • 这部分代码根据请求的路径来决定发送什么响应。如果路径是/login,则发送"登录页面"的文本;如果路径是/reg,则发送"注册页面"的文本;如果路径不是这两个之一,则设置HTTP状态码为404(表示未找到资源),并发送"Not Found"的文本。

|---|----------------------------------------------------------------|
| | } else { |
| | response.statusCode = 405; // 对于非GET请求,设置HTTP状态码为405(方法不允许) |
| | response.end('Method Not Allowed'); |
| | } |

  • 这部分代码处理非GET请求的情况。如果请求的方法不是GET,则设置HTTP状态码为405(表示方法不允许),并发送"Method Not Allowed"的文本。

|---|-------|
| | }); |

  • 这行代码结束了http.createServer方法的回调函数定义。

|---|--------------------------------|
| | server.listen(9000, () => { |
| | console.log('启动成功!'); |
| | }); |

  • 这行代码让服务器监听9000端口上的连接。当服务器成功启动并开始监听端口时,会执行提供的回调函数,该函数简单地打印"启动成功!"到控制台。
相关推荐
白总Server38 分钟前
GaussDB 分布式数据库调优(架构到全链路优化)
java·网络·c++·架构·go·scala·数据库架构
XiaoCCCcCCccCcccC1 小时前
传输层协议 TCP 介绍 -- TCP协议格式,确认应答机制,超时重传机制,连接管理机制,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答
网络·网络协议·tcp/ip
我言秋日胜春朝★2 小时前
【Linux网络编程】基于udp套接字实现的网络通信
linux·网络·udp
搬码临时工3 小时前
域名访问内网网站知多少?通过自定义域名访问本地Web 服务
服务器·网络·tcp/ip
摘取一颗天上星️3 小时前
端到端记忆网络 vs 神经图灵机:外部记忆的两种哲学之争
网络·人工智能·深度学习·机器学习·lstm·外部记忆
数据与人工智能律师4 小时前
当机床开始“思考”,传统“制造”到“智造”升级路上的法律暗礁
大数据·网络·算法·云计算·区块链
开源的6lowpan5 小时前
无线USB转换器TOS-WLink露面1个月以来总结
网络·无线调试器·无线usb转换器·无线串口·无线jlink·无线stlink
~央千澈~5 小时前
WebSocket与XMPP:即时通讯技术的本质区别与选择逻辑优雅草卓伊凡|片翼|许贝贝
网络·websocket·网络协议
超级土豆粉5 小时前
OSI 七层网络模型
网络
盛满暮色 风止何安6 小时前
BGP基础
运维·服务器·网络·网络协议·tcp/ip·网络安全·智能路由器