Node.js创建HTTP文件服务器的使用示例

下面我将为您详细讲解如何使用Node.js创建HTTP文件服务器。

概述

Node.js是一个非常流行的JavaScript后端运行环境,它可以帮助我们轻松创建一个HTTP服务器并用于提供Web请求服务。本文将会介绍如何使用Node.js快速创建一个HTTP文件服务器。

步骤

步骤1:安装Node.js

首先我们需要安装Node.js,在官方网站 https://nodejs.org/zh-cn/ 下载安装包,并在本地安装。安装过程非常简单,只需按照指示操作即可。

步骤2:创建工作目录

在本地创建工作目录,并在其中新建一个JavaScript文件,例如 server.js

步骤3:编写代码

server.js 文件中编写以下代码:

const http = require('http');   // 引入 http 模块
const fs = require('fs');       // 引入文件系统模块

const server = http.createServer((req, res) => {
    fs.readFile(__dirname + req.url, (err, data) => {   // 读取请求的文件
        if (err) {                                      // 如果文件不存在
            res.writeHead(404, {'Content-Type': 'text/plain'});
            res.write('The file does not exist.');
            res.end();
        } else {                                        // 文件存在
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.write(data);
            res.end();
        }
    });
});

server.listen(3000, () => console.log('The server is running on http://localhost:3000'));  // 服务监听 3000 端口

上述代码中,我们使用Node.js的 http 模块创建了一个服务,并使用 fs 模块读取请求的文件。如果读取成功,将文件内容发送给客户端;否则发送404响应。

步骤4:启动服务

在终端中进入工作目录,执行以下命令启动服务:

node server.js

运行成功后,终端中会输出“The server is running on http://localhost:3000”,说明服务已经成功启动。

步骤5:访问

在浏览器中访问以下URL,即可访问到服务:

http://localhost:3000

至此,我们完成了使用Node.js创建HTTP文件服务器的全过程。

示例说明

下面是两个示例,帮助您更好地理解Node.js创建HTTP文件服务器的使用方法:

示例1:提供指定目录下的文件服务

如果您希望在服务中提供指定目录下的文件服务,可以在 server.js 中加入以下代码:

const path = require('path');   // 引入 path 模块

const server = http.createServer((req, res) => {
    const filepath = path.join(__dirname, 'public', req.url);   // 拼接文件路径
    fs.readFile(filepath, (err, data) => {                     // 读取请求的文件
        if (err) {                                              // 如果文件不存在
            res.writeHead(404, {'Content-Type': 'text/plain'});
            res.write('The file does not exist.');
            res.end();
        } else {                                                // 文件存在
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.write(data);
            res.end();
        }
    });
});

// 更改监听端口
server.listen(4000, () => console.log('The server is running on http://localhost:4000'));

上述代码将会在 public 目录下寻找请求的文件。

示例2:添加缓存控制

如果您希望添加缓存控制,可以在 server.js 中加入以下代码:

const maxAge = 3600 * 24 * 365;   // 缓存周期为一年

fs.readFile(filepath, (err, data) => {
    if (err) {                                              // 如果文件不存在
        res.writeHead(404, {'Content-Type': 'text/plain'});
        res.write('The file does not exist.');
        res.end();
    } else {                                                // 文件存在
        const stats = fs.statSync(filepath);
        const lastModified = stats.mtime.toUTCString();
        const etag = crypto.createHash('md5').update(data.toString()).digest('hex');
        const expires = new Date(Date.now() + maxAge * 1000).toUTCString();
        res.setHeader('Cache-Control', 'public, max-age=' + maxAge);
        res.setHeader('Expires', expires);
        res.setHeader('Last-Modified', lastModified);
        res.setHeader('ETag', etag);

        const ifModifiedSince = req.headers['if-modified-since'];
        const ifNoneMatch = req.headers['if-none-match'];
        if (ifModifiedSince === lastModified || ifNoneMatch === etag) {
            res.writeHead(304, {'Content-Type': 'text/plain'});
            res.end();
        } else {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.write(data);
            res.end();
        }
    }
});

上述代码中,我们添加了缓存控制,避免重复读取同一个文件,提升服务器的性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js创建HTTP文件服务器的使用示例 - Python技术站

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

相关文章

  • JavaScript 用Node.js写Shell脚本[译]

    让我来详细讲解“JavaScript 用Node.js写Shell脚本[译]”的完整攻略。 什么是 Shell 脚本? Shell 脚本是一种运行在 Unix/Linux 系统上的脚本,用于自动执行一系列的命令或操作。通常用 Shell 脚本来完成常规的任务,如备份数据、自动部署应用程序等。 Shell 脚本通常是使用 Shell 编程语言编写的。Shell…

    node js 2023年6月8日
    00
  • 详细分析Node.js 多进程

    详细分析Node.js 多进程 介绍 Node.js 是一个基于事件驱动和非阻塞的 I/O 模型而得名的开源、跨平台的运行时环境。Node.js 采用单线程模型,但是Node.js可以通过创建多进程的方式充分利用硬件资源,提高服务器的承载能力。本文将详细分析 Node.js 的多进程,包括 Fork、Cluster 和 Child Process。 什么是 …

    node js 2023年6月8日
    00
  • 2020字节跳动前端面试题一面解析(附答案)

    下面是针对“2020字节跳动前端面试题一面解析(附答案)”这篇文章的详细讲解完整攻略。 一、题目链接和基本信息 首先,我们需要提供文章链接和基本信息。这是为了方便读者获取原始资料,了解面试题目的来源和出题方。 文章链接:https://mp.weixin.qq.com/s/FBmhI1tnDRQglfp5XFKKEw出题方:字节跳动前端团队 二、题目分析和答…

    node js 2023年6月8日
    00
  • node.js连接MongoDB数据库的2种方法教程

    下面我将详细讲解“Node.js连接MongoDB数据库的2种方法教程”的完整攻略。 概述 在使用Node.js进行Web开发时,我们通常需要连接数据库来存储和管理数据。MongoDB是一种流行的NoSQL数据库,它可以非常方便地与Node.js配合使用。本文将介绍如何使用Node.js连接MongoDB数据库的2种方法。 方法一:Mongoose Mong…

    node js 2023年6月8日
    00
  • Node批量爬取头条视频并保存方法

    以下是“Node批量爬取头条视频并保存方法”的完整攻略: 1. 准备工作 首先,需要确保已经安装了Node.js和npm。然后,安装所需的依赖模块:cheerio和request-promise。安装命令如下: npm install cheerio request-promise 2. 获取视频列表 爬取头条视频,需要先获取视频列表。可以通过头条的API接…

    node js 2023年6月8日
    00
  • 用nodejs实现PHP的print_r函数代码

    当我们使用PHP开发时,经常使用print_r函数来打印复杂数据结构,例如数组、对象等,这样可以方便我们对数据结构的处理和调试。在使用nodejs开发时,我们同样需要类似的函数,那么如何用nodejs实现PHP的print_r函数呢? 下面是完整的攻略。 第一步:安装需要用到的依赖包 我们需要安装两个依赖包:util和string-width。 在终端中执行…

    node js 2023年6月8日
    00
  • 微信小程序访问node.js接口服务器搭建教程

    下面我将为你讲解如何搭建一个用于微信小程序访问的node.js接口服务器。 为什么需要搭建node.js接口服务器 一般而言,微信小程序本身是不支持直接连接数据库的,如果需要使用到数据库,就需要通过中间层的接口服务器来访问数据库。而node.js作为高效、稳定、易于操作的后台应用开发语言,非常适合用来搭建这样的接口服务器。 搭建node.js接口服务器的步骤…

    node js 2023年6月8日
    00
  • 微信小程序搭载node.js服务器的简单教程

    我们来详细讲解如何搭载一个微信小程序,使其能够与一个node.js服务器进行交互。 前置条件 在开始创建微信小程序之前,请确保准备好以下工具: 微信开发者工具 node.js安装包 npm管理工具 创建微信小程序 首先,我们需要在微信开发者工具中创建一个新的微信小程序项目。在创建项目时,需要设置好项目的appid,并选择一个模板来快速创建项目结构。 创建完毕…

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