Nodejs实现的一个静态服务器实例

下面是Node.js实现的静态服务器的攻略:

准备工作

在实现静态服务器之前,需要在本地先准备好一些资源,例如图片、html文件等。这些资源需要保存在一个文件夹中,并且需要记住该文件夹的路径,以便后续使用。

实现过程

第一步:导入依赖

在实现一个Node.js服务器时,需要导入http和fs(文件系统)模块。http模块用于开启服务器,fs模块用于读取文件。

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

第二步:开启服务器

创建一个http服务器,并监听在其中。

const server = http.createServer((req, res) => { 
  // 程序接收请求并响应内容
}
server.listen(3000, () => { // 服务器监听端口为 3000
  console.log('Server running at http://localhost:3000');
});

第三步:程序接收请求并响应内容

在服务器接收到请求时,程序应该做出相应处理并返回相应内容。对于静态服务器,程序应该返回请求的文件内容。

const server = http.createServer((req, res) => { 
  const filePath = `.${req.url}`; // 获取文件路径
  fs.readFile(filePath, (err, data) => { // 读取文件
    if (err) { // 如果文件读取失败
      res.writeHead(404, {'Content-Type': 'text/plain'}); // 返回响应码 404
      res.write('404 Not Found'); // 返回响应内容
      res.end(); // 结束响应
    } else { // 如果文件读取成功
      res.writeHead(200); // 返回响应码 200
      res.write(data); // 返回响应内容
      res.end(); // 结束响应
    }
  });
});

示例一:返回静态html页面

const server = http.createServer((req, res) => {
  const filePath = `.${req.url}`; // 获取文件路径
  if (req.url === '/index.html') { // 当请求的资源为 index.html 时
    fs.readFile('./index.html', {encoding: 'utf-8'}, (err, data) => { // 读取index.html文件
      res.writeHead(200, {'Content-Type': 'text/html'}); // 返回html响应头
      res.write(data); // 返回html内容
      res.end(); // 结束响应
    });
  } else { // 其他情况,返回404错误
    res.writeHead(404, {'Content-Type': 'text/plain'}); // 返回响应码 404
    res.write('404 Not Found'); // 返回响应内容
    res.end(); // 结束响应
  }
});

示例二:返回静态图片

const server = http.createServer((req, res) => {
  const filePath = `.${req.url}`; // 获取文件路径
  const imageTypes = ['.jpg', '.jpeg', '.png']; // 定义支持的图片类型
  if (imageTypes.includes(filePath.slice(-4))) { // 当请求的资源为图片时
    fs.readFile(filePath, (err, data) => { // 读取图片
      if (err) { // 如果文件读取失败
        res.writeHead(404, {'Content-Type': 'text/plain'}); // 返回响应码 404
        res.write('404 Not Found'); // 返回响应内容
        res.end(); // 结束响应
      } else { // 如果文件读取成功
        res.writeHead(200, {'Content-Type': `image/${filePath.slice(-3)}`}); // 返回响应头,使用slice获取图片类型
        res.write(data); // 返回响应内容
        res.end(); // 结束响应
      }
    });
  } else { // 其他情况,返回404错误
    res.writeHead(404, {'Content-Type': 'text/plain'}); // 返回响应码 404
    res.write('404 Not Found'); // 返回响应内容
    res.end(); // 结束响应
  }
});

完整代码

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

const server = http.createServer((req, res) => {
  const filePath = `.${req.url}`;
  const imageTypes = ['.jpg', '.jpeg', '.png'];
  if (imageTypes.includes(filePath.slice(-4))) {
    fs.readFile(filePath, (err, data) => {
      if (err) {
        res.writeHead(404, {'Content-Type': 'text/plain'});
        res.write('404 Not Found');
        res.end();
      } else {
        res.writeHead(200, {'Content-Type': `image/${filePath.slice(-3)}`});
        res.write(data);
        res.end();
      }
    });
  } else if (req.url === '/index.html') {
    fs.readFile('./index.html', {encoding: 'utf-8'}, (err, data) => {
      res.writeHead(200, {'Content-Type': 'text/html'});
      res.write(data);
      res.end();
    });
  } else {
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.write('404 Not Found');
    res.end();
  }
});

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs实现的一个静态服务器实例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js 基于 STMP 协议和 EWS 协议发送邮件

    Node.js 是一种基于事件驱动和非阻塞 I/O 模型的 JavaScript 运行时环境,广泛应用于服务器端应用程序的开发。基于 STMP 协议和 EWS 协议的邮件发送是 Node.js 程序中一项常见的任务。下面是一份完整的攻略,包含邮件发送的各个步骤和两个示例说明。 准备工作 在进行邮件发送前,需要安装以下 npm 模块: nodemailer:用…

    node js 2023年6月8日
    00
  • Webpack 实现 Node.js 代码热替换

    Webpack 实现 Node.js 代码热替换是一种高效的开发方式,在开发过程中可以实时的修改代码,并及时看到修改的效果。下面将详细介绍如何实现Node.js代码的热替换。 1. 安装依赖 首先需要安装 webpack、webpack-dev-middleware 和 webpack-hot-middleware,我们可以使用下面的命令来安装: npm i…

    node js 2023年6月8日
    00
  • Node.js API详解之 dgram模块用法实例分析

    那么首先我们需要了解一下Node.js API中的dgram模块。该模块是Node.js的内置模块之一,用于在UDP数据报套接字上提供了一个异步的事件驱动操作。 dgram模块的基本概念 在使用dgram模块之前,我们先来了解一些UDP协议的基本概念。 UDP(User Datagram Protocol)用户数据报协议是一种面向数据报的无连接协议,也就是说…

    node js 2023年6月8日
    00
  • vue init webpack 建vue项目报错的解决方法

    问题描述:在使用vue init webpack命令创建vue项目时,可能会遇到以下错误提示: AssertionError [ERR_ASSERTION]: Task function must be specified TypeError: Cannot read property ‘apply’ of undefined 这种错误可能是由于 vue-c…

    node js 2023年6月8日
    00
  • JavaScript Fetch API请求和响应拦截详解

    JavaScript Fetch API请求和响应拦截详解 什么是Fetch API? fetch是Web API中的一个新的API,可以用来发起HTTP请求并获取响应数据。它支持Promise,让我们在异步请求中处理响应更加方便和灵活。 发起请求 使用fetch发起请求非常简单,我们只需要提供请求的URL和可选的一些配置,然后fetch会返回一个Promi…

    node js 2023年6月8日
    00
  • Node升级后vue项目node-sass报错问题及解决

    针对该问题,下面给出详细的解决攻略: 问题描述 在升级 Node 版本后,运行 Vue 项目时,可能会出现以下报错: Error: Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 12.x Found bindings f…

    node js 2023年6月8日
    00
  • TypeScript安装与使用的详细教程

    下面是TypeScript安装与使用的详细教程: 安装 1. 安装node.js 首先,我们需要安装node.js,可以使用node.js官网提供的安装包进行安装。 2. 安装TypeScript node.js安装完成后,我们可以使用npm命令安装TypeScript。在命令行工具中执行以下命令: npm install -g typescript 这样就…

    node js 2023年6月8日
    00
  • vue: WebStorm设置快速编译运行的方法

    当你在使用Vue开发应用程序时,你会发现频繁编译和运行是开发的常态。为了提高开发效率,很多开发者都会在IDE中设置快捷键做到快速编译和运行。在WebStorm中,也可以通过设置快捷键实现快速编译和运行Vue应用程序。下面是具体步骤: 第一步:设置环境变量 在打开WebStorm之前,需要先设置好NODE_ENV环境变量。为此,可以在命令行中输入以下命令: e…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部