📌  相关文章
📜  网络技术问题 | Node.js 测验 |第 3 组 |问题 8(1)

📅  最后修改于: 2023-12-03 15:27:40.423000             🧑  作者: Mango

网络技术问题 | Node.js 测验 |第 3 组 |问题 8

介绍

在 Node.js 中,网络编程是一项非常重要的技能。作为一名程序员,在开发网络应用程序时,经常需要处理网络请求和响应,而 Node.js 提供了许多模块和库来简化这个过程。本测验将涵盖一些 Node.js 中与网络编程相关的知识,包括如何创建和监听服务器,如何发送和接收 HTTP 请求和响应等。

问题描述

以下代码段可以在 Node.js 中创建一个 HTTP 服务器并将其绑定到端口号 3000:

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, world!\n');
});

server.listen(3000, () => {
  console.log('Server running on http://localhost:3000/');
});

请你在上面的代码段基础上实现一个简单的 Web 服务器,使其能够处理 GET 请求,并返回一个 HTML 页面。HTML 页面的内容如下:

<!DOCTYPE html>
<html>
<head>
  <title>Hello, world!</title>
</head>
<body>
  <h1>Hello, world!</h1>
  <p>This is a test page.</p>
</body>
</html>

提示:

  • 可以使用 fs 模块来读取 HTML 页面的内容。
  • 可以使用 res.setHeader() 方法来设置 HTTP 响应头。
  • 可以使用 res.write() 方法来写入 HTTP 响应体。
  • 可以使用 res.end() 方法来结束 HTTP 响应。
解答

以下是实现一个简单的 Web 服务器的代码:

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/') {
    fs.readFile('index.html', (err, data) => {
      if (err) {
        res.statusCode = 500;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Internal Server Error\n');
      } else {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/html');
        res.write(data);
        res.end();
      }
    });
  } else {
    res.statusCode = 404;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Not Found\n');
  }
});

server.listen(3000, () => {
  console.log('Server running on http://localhost:3000/');
});

该服务器会监听端口号为 3000 的 HTTP 请求,并根据请求方法和路径来处理请求。如果请求方法为 GET,且路径为 /,则返回 HTML 页面,否则返回 404 错误。HTML 页面的内容来自于 index.html 文件,如果文件读取出现错误,则返回 500 错误。