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的HTTP模块

    深入理解Node.js的HTTP模块攻略 Node.js的HTTP模块提供了用于创建HTTP服务器和客户端的API,使得我们可以轻松地进行网络编程。在本攻略中,我们将深入学习Node.js的HTTP模块,了解其核心特性,以及如何在实际项目中使用。 HTTP简介 HTTP是一个应用层协议,用于在客户端和服务器之间传输数据。HTTP协议基于请求-响应模式,客户端…

    node js 2023年6月8日
    00
  • Node.js编写组件的三种实现方式

    那我来详细讲解一下“Node.js编写组件的三种实现方式”吧。 前言 Node.js是一种用于编写高效的、可扩展的网络应用程序的开发平台。除了能够构建完整的应用程序外,Node.js还可以作为组件进行编写,以便在多个项目之间重用。本文将讲解三种实现Node.js组件的方式。 方法一:直接导出函数 Node.js组件的第一种实现方式是直接导出函数。这种方法非常…

    node js 2023年6月8日
    00
  • javascript 进阶篇2 CSS XML学习

    Javascript 进阶篇2 CSS XML 学习攻略 1. 学习 CSS CSS(Cascading Style Sheets)是一种用于描述网页布局和样式的语言。在学习 CSS 之前,先要了解 HTML 的基础知识,因为 CSS 主要是用来修饰 HTML 的。 以下是学习 CSS 的步骤: 学习 CSS 的基本语法 selector { propert…

    node js 2023年6月8日
    00
  • Linux安装Nodejs的三大方法(建议源码安装)

    下面是详细讲解“Linux安装Nodejs的三大方法(建议源码安装)”的完整攻略。 Linux安装Nodejs的三大方法 据统计,在全球范围内,约70%的网站采用的是Node.js作为后端编程语言,受到了广大开发者和企业的高度认可,可见其受欢迎程度之高。那么,如何在Linux系统上安装Node.js呢?下面我们将讲解三种方法。 方法一:使用系统包管理器安装 …

    node js 2023年6月8日
    00
  • node.js chat程序如何实现Ajax long-polling长链接刷新模式

    Node.js是一个基于事件驱动、非阻塞IO模型的服务器端JavaScript运行环境。开发人员可以使用Node.js来轻松构建高性能的网络应用程序,包括聊天程序。Ajax long-polling长链接刷新模式可以使聊天程序更具响应性和实时性。下面是实现的完整攻略: 步骤1:创建Express应用程序 首先,需要使用Node.js的Express框架创建一…

    node js 2023年6月8日
    00
  • StringUtils工具包中字符串非空判断isNotEmpty和isNotBlank的区别

    StringUtils工具包是Apache Commons Lang中提供的一个字符串处理工具类库。其中,isNotEmpty和isNotBlank是用来判断字符串是否为空的两个方法,它们的区别如下: isNotEmpty isNotEmpty方法用于判断字符串是否不为空,不为空的条件是字符串不为null且长度大于0。 StringUtils.isNotEm…

    node js 2023年6月8日
    00
  • node.js安装及HbuilderX配置详解

    Node.js 安装及 HbuilderX 配置详解 安装 Node.js 打开 Node.js 官网(https://nodejs.org/en/),选择适合自己系统的版本下载。 安装 Node.js,安装过程中可以参考官方文档进行操作。 安装完成后,在终端(Mac、Linux)或命令提示符(Windows)输入以下命令,检验 Node.js 是否安装成功…

    node js 2023年6月8日
    00
  • 使用node.js实现微信小程序实时聊天功能

    使用node.js实现微信小程序实时聊天功能,需要以下几个步骤: 1. 创建小程序 首先,在微信公众平台注册账号,在小程序管理页面中创建小程序。 2. 创建后台服务 前往阿里云或者其他云服务商申请服务器,并安装Node.js环境。进入控制台,使用命令行工具创建一个Node.js项目,进入项目目录后,需要安装以下模块: npm install express …

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