Node 搭建一个静态资源服务器的实现

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,能够让 JavaScript 代码在服务器端运行。利用 Node.js 我们可以快速搭建一个简单的静态资源服务器。

创建一个服务器

在终端中使用以下命令创建一个新项目:

mkdir myServer
cd myServer
npm init

接下来我们需要安装依赖包 httpfs。其中 http 将用于创建服务器,fs 用于读取文件。

npm install http fs --save

在项目根目录中创建一个名为 server.js 的文件,并加入以下代码:

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

const server = http.createServer((req, res) => {
  let filePath = '.' + req.url;
  if (filePath === './') {
    filePath = './index.html';
  }

  fs.readFile(filePath, (error, content) => {
    if (error) {
      if (error.code === 'ENOENT') {
        fs.readFile('./404.html', (error, content) => {
          res.writeHead(404, { 'Content-Type': 'text/html' });
          res.end(content, 'utf-8');
        });
      } else {
        res.writeHead(500);
        res.end('Sorry, check with the site admin for error: ' + error.code + ' ..\n');
        res.end();
      }
    } else {
      res.writeHead(200, { 'Content-Type': 'text/html' });
      res.end(content, 'utf-8');
    }
  });
});

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

以上代码创建了一个服务器,在 3000 端口监听请求,并将静态文件返回给客户端。使用 http.createServer 方法创建服务器,回调函数 function(request, response) 处理请求和响应。在实现中我们先分析请求的 URL,如果是根路径根据默认信息 index.html 文件,否则返回请求路径对应的文件。对于不存在的文件,返回 404 Not Found 的状态码。对于其他错误,返回 500 Internal Server Error 的状态码。

运行 server.js

node server.js

访问 http://localhost:3000/ 即可查看是否正常启动。

提供 CSS, JavaScript 和图片等资源

除提供 HTML 页面外,还需要支持 CSS 文件和图片等其它资源文件的访问。可以设置一个 file type 的映射表,支持多种资源文件的访问。以下是完整代码的实现:

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

const mimeTypes = {
  'html': 'text/html',
  'css': 'text/css',
  'js': 'text/javascript',
  'jpeg': 'image/jpeg',
  'jpg': 'image/jpg',
  'png': 'image/png',
  'svg': 'image/svg+xml',
};

const server = http.createServer( (req, res) => {
  let filePath = '.' + req.url;
  if (filePath === './') {
    filePath = './index.html';
  }

  const extname = String(path.extname(filePath)).toLowerCase();
  const contentType = mimeTypes[extname] || 'application/octet-stream';

  fs.readFile(filePath, (error, content) => {
    if (error) {
      if (error.code === 'ENOENT') {
        fs.readFile('./404.html', (error, content) => {
          res.writeHead(404, { 'Content-Type': 'text/html' });
          res.end(content, 'utf-8');
        });
      } else {
        res.writeHead(500);
        res.end('Sorry, check with the site admin for error: ' + error.code + ' ..\n');
        res.end();
      }
    } else {
      res.writeHead(200, { 'Content-Type': contentType });
      res.end(content, 'utf-8');
    }
  });
});

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

在以上示例中,我们增加了一个 mimeTypes 对象,根据文件扩展名返回相应的 MIME 类型。获取文件扩展名可以使用 Node.js 内置的 path.extname 方法。同时,返回的状态码根据文件是否存在发生了变化:不存在,返回 404 状态码;其他错误,返回 500 状态码并在控制台中打印错误信息。

示例

以下是另外两个使用 Node.js 搭建的静态资源服务器示例:

Express

Express 是 Node.js 平台上运行的基于 Web 的应用程序开发框架,可以快速便捷地搭建 Node.js 应用程序。以下是 Express 框架搭建静态资源服务器的示例:

const express = require('express');
const app = express();
app.use(express.static('public')); // public 目录即为静态资源目录
const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Koa

Koa 是一个小巧且富有表现力的 Web 框架,使用 ES6 常规函数编写应用程序和中间件,并支持前缀中间件和异步处理,是 Express 的下一代基础架构。以下是 Koa 框架搭建静态资源服务器的示例:

const Koa = require('koa');
const serve = require('koa-static');
const app = new Koa();
const port = 3000;
app.use(serve('.')).listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

在 Koa 框架中,我们使用 koa-static 模块来提供静态文件服务。调用模块并传递一个文件夹(根目录下的文件夹或其他文件夹)即可。在以上示例中,传递了当前文件夹 . 作为静态文件夹。

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

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

相关文章

  • 详解Node中导入模块require和import的区别

    当在 Node 环境中导入模块时,可以使用 require 或 import 进行导入,它们的区别如下: require require 是 Node.js 中使用的导入模块的方法,语法如下: const module = require(‘module-name’); 其中,module-name 表示要导入的模块名称。 require 导入的模块可以使用…

    node js 2023年6月8日
    00
  • 详解本地Node.js服务器作为api服务器的解决办法

    下面是“详解本地Node.js服务器作为API服务器的解决办法”的攻略。 初步准备 首先,你需要安装Node.js。如果你的系统上没有安装Node.js,可以在官方网站(https://nodejs.org/)上下载对应的版本并安装。安装完成后,你可以打开终端或命令行工具并输入以下命令来验证Node.js是否成功安装: node -v 如果输出了Node.j…

    node js 2023年6月8日
    00
  • Zabbix添加Node.js监控的方法

    下面是“Zabbix添加Node.js监控的方法”的完整攻略以及两个示例说明: 1. 安装Zabbix agent 首先确保在要监控的服务器上已经安装了Zabbix agent,如果没有安装可以通过以下命令安装: $ sudo apt-get update $ sudo apt-get install zabbix-agent 安装完成后,确保Zabbix …

    node js 2023年6月8日
    00
  • nodejs log4js 使用详解

    Node.js log4js 使用详解 在Node.js项目开发中,我们往往需要记录日志以追踪程序的运行情况。log4js 是一个功能强大的记录日志的模块,它支持多种日志级别和日志输出方式。本篇文章将详细介绍 log4js 的使用,包括安装,配置和示例。 安装 log4js 你可以通过 npm 安装 log4js: npm install log4js –…

    node js 2023年6月8日
    00
  • 简单好用的nodejs 爬虫框架分享

    简单好用的 Node.js 爬虫框架分享 什么是爬虫框架 爬虫框架是一种编程工具,用于提取互联网上的信息。它是由数据抓取器、页面解析器、数据存储器等模块组成。一般情况下,它们帮助我们抓取一些网站的数据,分析并将它们存储到我们需要的地方。使用爬虫可以让我们快速地获取大量数据并进行分析。 Node.js 爬虫框架 Node.js爬虫框架是一个美妙的选择,因为它是…

    node js 2023年6月8日
    00
  • 搜狐前端岗一次失败的面试经历记录

    “搜狐前端岗一次失败的面试经历记录”攻略 背景 在求职过程中,经历过面试失败的情况是非常正常的一件事情。这里我分享了一次我在搜狐前端岗的面试经历,希望对其他前端求职者有所启示。 准备 在面试前,一定要对公司的业务和招聘职位有充分的了解,并做好充足的准备。这一点对于前端岗位的面试来说尤为重要,因为公司对于前端的技能要求通常都是较高的。我在准备期间,主要做了以下…

    node js 2023年6月8日
    00
  • NodeJs搭建本地服务器之使用手机访问的实例讲解

    以下是关于“NodeJs搭建本地服务器之使用手机访问的实例讲解”的详细说明。 1. 安装 Node.js 首先需要在电脑上安装 Node.js,下载安装包:https://nodejs.org/zh-cn/download/ 安装完成后,打开命令行工具,输入 node -v 和 npm -v 命令,确认Node.js和npm已经安装成功。 2. 新建项目并安…

    node js 2023年6月8日
    00
  • vue.js中指令Directives详解

    让我们来详细讲解一下“Vue.js中指令Directives”的完整攻略。 什么是指令Directives? 在Vue.js中,指令(Directives)是一种特殊的语法,用于提供需要被应用到DOM节点上的特殊行为。指令通常包含一个前缀 v-,例如 v-bind, v-if 和 v-for 等等。 指令主要用于对DOM进行操作和响应用户交互。Vue提供了许…

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