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

yizhihongxing

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.js模拟发起http请求从异步转同步的5种用法

    Node.js是一个非常流行的服务器端JavaScript运行环境,可以通过其内置的HTTP模块发起HTTP请求,但这些请求通常是异步的。如果需要将它们转换为同步请求,可以使用以下五种方法: 1. 使用Promise Promise是一种用于处理异步操作的设计模式。可以将异步请求包裹在Promise中,并在then和catch块中处理请求响应和错误。下面是一…

    node js 2023年6月8日
    00
  • node+vue前后端分离实现登录时使用图片验证码功能

    一、前言 前后端分离的应用现在越来越普及,如何实现前后端分离并且实现一些常见的功能逐渐成为一个必须要掌握的技能。 其中注册和登录是所有网站必备的功能。而且在现在的互联网环境中,为了防止恶意攻击等一些非法行为,很多站点都会在登录时使用验证码的方式进行验证。 那么,在本篇文章中,我们就来详细讲解一下如何在node和vue的前后端分离项目中实现登录时使用图片验证码…

    node js 2023年6月8日
    00
  • 浅析node命令行交互原理

    浅析node命令行交互原理 简介 在日常工作中,我们可能需要通过命令行与node.js程序进行交互来完成一些任务。本文将会深入浅出地讲解node命令行交互的原理及相关示例。 node命令行交互原理 node.js的命令行交互主要是基于node.js的标准库 readline 模块实现的。readline 模块提供了一组接口,可以创建一个读取命令行输入流的实例…

    node js 2023年6月8日
    00
  • node app 打包工具pkg的具体使用

    当使用Node.js开发应用程序时,我们通常会使用一些打包工具来将我们的代码打包成一个可执行文件,以便于在不安装Node.js的环境中运行应用。 其中,pkg是一款常用的打包工具。它可以将我们的代码打包成可执行文件,而且可以支持不同平台的打包。本攻略将会具体介绍pkg的使用方法。 安装pkg 在使用pkg之前,我们首先需要安装它。使用npm即可完成: npm…

    node js 2023年6月8日
    00
  • nodejs中exports与module.exports的区别详细介绍

    在nodejs中,我们可以通过exports与module.exports暴露模块成员,但它们之间存在一些差异。下面我们来详细介绍它们的区别。 module.exports与exports的关系 在nodejs中,每个模块都有一个module对象,它代表当前模块,其中包含了exports属性,而exports是module.exports的一个别名。也就是说…

    node js 2023年6月8日
    00
  • node.js中实现同步操作的3种实现方法

    当我们使用Node.js时,我们通常会遇到异步编程的问题。但是,在某些情况下,我们需要执行同步操作,以便我们的代码在完成同步操作后才继续执行。以下是在Node.js中实现同步操作的3种方法: 1. 使用Sync模块 Sync模块是Node.js中实现同步操作的一种方法。可以在执行同步操作时使用此方法。例如: var fs = require("fs…

    node js 2023年6月8日
    00
  • node.js-v6新版安装具体步骤(分享)

    Node.js-v6新版安装具体步骤(分享) 简介 Node.js是一个基于Chrome V8引擎构建的JavaScript运行时,Node.js可以使JavaScript在后台运行,执行I/O操作和网络编程等任务。Node.js可用于开发服务器端应用程序,也可用于编写命令行工具等。 如果你是第一次安装Node.js,或者需要安装新版的Node.js,那么你…

    node js 2023年6月8日
    00
  • 在JS循环中使用async/await的方法

    当在JavaScript中使用循环时,通常我们会面临一个问题,即如何同时异步执行循环体中的多个异步操作,并在它们都完成后执行下一步操作。对于这种情况,我们可以使用async/await结合并发循环来解决这个问题。 使用Promise.all结合循环并发执行异步操作 一种常见的使用async/await结合并发循环的方法是使用Promise.all。假设我们有…

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