NodeServe:构建高效静态文件服务器的完美指南

简介: Node.js实现静态文件服务器

读过这篇文章《用Node.js吭哧吭哧撸一个运动主页》的同学肯定知道,前段时间我搭了一个运动页面。现在我有个想法就是把它用Docker打包镜像推送到Docker官方仓库,像《前端切图仔入门Docker,三分钟上线自己的博客平台》文章中搭建博客系统一样,提供一个运动主页的Docker镜像,方便有想法的同学三分钟部署自己的运动主页。

什么是静态文件服务器

作为前端搬砖工,一定接触过静态文件服务器。静态文件服务器它的工作是将静态文件通过http/https传输给客户端。静态文件又是什么?静态文件是指内容不需要动态生成的文件,如:图片、CSS文件、JS文件等等文件。我们常用的静态文件服务器有webpack-dev-server这也是为什么我们能在本地开发环境可以通过链接访问页面的原因,还有就是Nginx,一般线上环境使用它,因为它性能更加高效、稳定。

运动主页简单,完全没必要在Docker打包时再下载Nginx镜像打包进去,直接用Node.js实现静态文件服务器的功能即可。

功能介绍

我需要的静态服务器只需要一个功能:

  • 当用户请求的内容是文件时,返回文件内容

项目静态文件结构是这样的:

client
├─src
│  └─js文件
└─index.html

详细文件结构请访问仓库地址

启动项目

拉取项目:

git clone https://github.com/CatsAndMice/keep

下载依赖:

npm i 

创建.env文件,写入Keep帐号、密码:

MOBILE="Keep帐号"
PASSWORD="Keep密码"

最后,执行npm run serve,项目即可启动。当我们直接访问

http://localhost:3000就能访问index.html文件,index.html文件内容如下:

image.png

代码实现

根据上文的需求描述,我们先用流程图来设计一下我们的逻辑如何实现:

image.png

静态文件服务器的实现思路还是很简单的:先判断资源存不存在,不存在就直接报错,资源存在的话根据资源的类型返回对应的结果给客户端就可以了。

Express实现

运动主页非常简单,很多静态JS、图片文件已放置在云端,index.html文件只引用了一份本地的JS文件。不论是什么请求方式,当有请求路径存在/src时都会走app.all('/src/*',()⇒{...})

不同的静态文件对应不同的请求头Content-Type值,如:JS文件对应application/javascript 、CSS文件对应text/css等等,点Content-Type类型可以查看还有哪些值。

Content-Type 标头目的是为了告诉客户端实际返回的内容的内容类型,以便客户端依据文件类型进行解析。

const express = require('express');
const { getTotal, getFirstPageRecentUpdates } = require("./src")
const { to } = require('await-to-js');
const path = require('path');
const fs = require('node:fs')
const app = express();
const port = 3000;
//获取client文件夹的绝对路径
const htmlPath = path.join(__dirname, './client');
//请求头Content-Type值
const contentType = {
    '.js': 'application/javascript;charset=utf8'
}

//省略其他逻辑

//路径存在"/src",执行下列代码块逻辑
app.all('/src/*', (req, res) => {
    const { url } = req;
    const filePath = htmlPath + url;
    //判断文件是否存在
    if (fs.existsSync(filePath)) {
        const extname = path.extname(filePath);
        res.setHeader('Content-Type', contentType[extname]);
        const content = fs.readFileSync(filePath);
        res.send(content);
        return
    }
    //不存在,浏览器状态码返回404
    res.sendStatus('404')
})

//访问http://localhost:3000时,执行这部分逻辑返回index.html内容
app.get('/', async (req, res) => {
    res.setHeader('Content-Type', 'text/html;charset=utf8');
    const readHtmlPath = htmlPath + '/index.html'
    const html = fs.readFileSync(readHtmlPath)
    res.send(html)
})

app.listen(port, () => {
    console.log('服务已开启');
})

写一个能用的静态文件服务器还是简单的,这里依赖Express框架方便得多。原生模块实现有兴趣的同学可以去写写。

最后

文章中介绍实现了一个最简单能用的静态文件服务器,如果开发一个完善的静态文件服务器还有非常多的功能要考虑,如:静态文件缓存、压缩等等。

另外还有一个真实案例给大家实践,有兴趣的同学clone下来自己玩玩。

如果我的文章对你有帮助,您的👍就是对我的最大支持^_^。

欢迎围观朋友圈、加我微信拉您加入人类高质量前端交流群

目录
相关文章
|
16天前
|
存储 弹性计算 SDN
企业级 ECS 集群的构建需要综合考虑多个因素,通过不断的比较和对比不同的方案,选择最适合企业自身需求和发展的架构。
【9月更文挑战第5天】在数字化商业环境中,构建企业级ECS(弹性计算服务)集群对提升业务稳定性、扩展性和性能至关重要。本文将比较传统物理服务器与ECS架构,分析云服务商选择(如AWS和阿里云)、实例配置(CPU/内存)、网络架构(SDN vs 传统)及存储方案(本地存储 vs 云存储),帮助企业根据自身需求选出最优方案,实现高效稳定的ECS集群部署。
48 18
|
9天前
|
网络协议 Linux Windows
构建 DHCP 服务器
DHCP(动态主机配置协议)是局域网中使用UDP工作的协议,负责自动分配IP地址等网络配置。它利用UDP端口67/68作为服务器/客户端通信端口。通过配置DHCP服务器(例如使用`yum install dhcp dhcp-devel -y`安装),可在`/etc/dhcpd.conf`中定义地址池、子网掩码、默认网关等参数。服务器需设置静态IP并运行TCP/IP协议。客户端只需简单配置为DHCP模式即可自动接收配置信息。
25 9
|
8天前
|
网络安全
构建 NTP 时间服务器
构建 NTP 时间服务器
26 2
|
16天前
|
存储 弹性计算 缓存
企业级 ECS 集群构建的巅峰对决:谁能主宰未来的命运?
【9月更文挑战第5天】在数字化商业环境中,构建企业级ECS集群对提高业务稳定性、扩展性和性能至关重要。与传统物理服务器相比,ECS可根据需求快速伸缩资源,提升效率和响应速度。选择云服务商时需考量服务广度、成本及网络覆盖。配置ECS实例要考虑业务特性,如计算或内存需求。网络架构方面,软件定义网络(SDN)比传统三层架构更灵活高效。存储方案的选择也影响性能和扩展性。综上所述,构建高效稳定的ECS集群需综合考量多种因素,以支持业务发展。
36 8
|
4天前
|
安全 关系型数据库 API
深入理解后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端技术的核心概念和最佳实践,包括服务器端编程、数据库管理、API设计与开发等方面。我们将从基础开始,逐步深入,帮助读者建立起对后端开发的全面理解,从而能够独立构建高效、可靠的服务器端应用。
14 0
|
20天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
29 0
|
21天前
|
Rust 安全 Java
Rust语言在Web后端的应用:基于Actix-web构建高性能、安全可靠的服务器实践
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的无限潜力。
47 0
|
22天前
|
JavaScript 前端开发 UED
服务器端渲染新浪潮:用Vue.js和Nuxt.js构建高性能Web应用
【8月更文挑战第30天】在现代Web开发中,提升应用性能和SEO友好性是前端开发者面临的挑战。服务器端渲染(SSR)能加快页面加载速度并改善搜索引擎优化。Vue.js结合Nuxt.js提供了一个高效框架来创建SSR应用。通过安装`create-nuxt-app`,可以轻松创建新的Nuxt.js项目,并利用其自动路由功能简化页面管理。Nuxt.js默认采用SSR模式,并支持通过`asyncData`方法预取数据,同时提供了静态站点生成和服务器端渲染的部署选项,显著提升用户体验。
46 0
|
23天前
|
存储 Ubuntu 搜索推荐
构建多用户的 Jupyter 服务器 —— 利用 JupyterHub
【8月更文第29天】**摘要** JupyterHub 是一个易于使用的、可伸缩的、多用户的 Jupyter Notebook 服务器。它允许您在一个集中式服务器上托管多个独立的 Jupyter Notebook 会话,非常适合团队协作和教学环境。本文将详细介绍如何安装和配置 JupyterHub,以及如何利用它来构建一个多用户 Jupyter 服务器环境。
53 0
|
1月前
|
缓存 监控 中间件
构建高效的Go语言Web服务器:基于Fiber框架的性能优化实践
在追求极致性能的Web开发领域,Go语言(Golang)凭借其高效的并发处理能力、垃圾回收机制及简洁的语法赢得了广泛的青睐。本文不同于传统的性能优化教程,将深入剖析如何在Go语言环境下,利用Fiber这一高性能Web框架,通过精细化配置、并发策略调整及代码层面的微优化,构建出既快速又稳定的Web服务器。通过实际案例与性能测试数据对比,揭示一系列非直觉但极为有效的优化技巧,助力开发者在快节奏的互联网环境中抢占先机。

热门文章

最新文章