美文网首页
node 创建静态文件服务器

node 创建静态文件服务器

作者: shadow123 | 来源:发表于2019-04-22 16:39 被阅读0次

创建静态文件服务器既要用到 Node 内置的功能,也要用第三方的 mime 附加模块来确定文件的 MIME 类型。

先从程序的主文件开始,请在项目根目录下创建 server.js 文件,使用 Node 中跟 HTTP 相关的功能、跟文件系统交互的功能,以及确定文件 MIME 类型的功能。变量 cache 是用来缓存文件中的数据的。

var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var cache = {};

1.发送文件数据及错误响应

接下来要添加三个辅助函数以提供静态HTTP文件服务。第一个是在所请求的文件不存在时发送404错误的。把下面的辅助函数加到 server.js 中:

function send404(response) {
    response.writeHead(404, { 'Content-Type': 'text/plain' });
    response.write('Error 404: resource not found');
    response.end();
}

第二个辅助函数提供文件数据服务。这个函数先写出正确的HTTP头,然后发送文件的内容。把下面的代码添加到 server.js 中:

function sendFile(response, filePath, fileContents) {
    response.writeHead(200, { "Content-Type": mime.getType(path.basename(filePath)) });
    response.end(fileContents);
}

访问内存(RAM)要比访问文件系统快得多,所以Node程序通常会把常用的数据缓存到内存里。只有第一次访问的时候才会从文件系统中读取。下一个辅助函数会确定文件是否缓存了,如果是,就返回它。如果文件还没被缓存,它会从硬盘中读取并返回它。如果文件不存在,则返回一个HTTP 404错误作为响应。把这个辅助函数加到server.js 中:

function serveStatic(response, cache, absPath) {
    if (cache[absPath]) {
        sendFile(response, absPath, cache[absPath])
    } else {
        fs.exists(absPath, function(exists) {
            if (exists) {
                fs.readFile(absPath, function(err, data) {
                    if (err) {
                        send404(response)
                    } else {
                        cache[absPath] = data
                        sendFile(response, absPath, data)
                    }
                })
            } else {
                send404(response)
            }
        })
    }
}
  1. 创建HTTP服务器

在创建HTTP服务器时,需要给 createServer 传入一个匿名函数作为回调函数,由它来处理每个HTTP请求。这个回调函数接受两个参数: requestresponse 。在这个回调执行时,HTTP 服务器会分别组装这两个参数对象,以便你可以对请求的细节进行处理,并返回一个响应。

将下面代码清单中的逻辑添加到server.js中以创建HTTP服务器。

var server = http.createServer(function(request, response) {
    var filePath = false;
    if (request.url == '/') {
        filePath = 'public/index.html'
    } else {
        filePath = 'public' + request.url;
    }
    var absPath = './' + filePath;
    serveStatic(response, cache, absPath)
})

3.启动HTTP服务器

现在你已经写好了创建 HTTP 服务器的代码,但还没添加启动它的逻辑。添加下面这些代码,它会启动服务器,要求服务器监听 TCP/IP 端口 30003000 是随便选的,所有 1024 以上的未用端口应该都可以(如果在 Windows 上运行,1024以下的端口也行,或者在 LinuxOS X 中用 root 这样的特权用户启动程序也可以)。

server.listen(3000, function() {
    console.log("Server listening on port 3000")
})

在命令行中输入下面这条命令启动服务器:

node server

服务器运行起来后,在浏览器中访问 http://127.0.0.1:3000 ,如果遇到找不到的文件会激发 404 错误辅助函数,页面上会显示“Error 404: resource not found。”消息。记住,在命令行中按下Ctrl-C可以停止正在运行的服务器。

github代码链接

相关文章

  • java Socket 实现多线程静态文件服务器

    关于静态文件服务器,我觉得博文共赏:Node.js静态文件服务器实战写的不错,简单易懂,思路清晰,不过使用Node...

  • node 创建静态文件服务器

    创建静态文件服务器既要用到 Node 内置的功能,也要用第三方的 mime 附加模块来确定文件的 MIME 类型。...

  • 使用Node.js搭建简单静态文件服务器

    这半个多月一直在学Node.js,还是在入门阶段,不过已经对Node很感兴趣了。这里介绍一个简单的静态文件服务器,...

  • 通过手写文件服务器,说说前后端交互

    前言 最近用node写了一个静态文件服务器(已发布到npm),想通过这个小例子说说前后端基于HTTP协议交互过程中...

  • 实战node静态文件服务器

    支持功能: 读取静态文件 访问目录可以自动寻找下面的index.html文件, 如果没有index.html则列出...

  • node的一些基础知识

    利用node启动简单的静态http服务 http模块创建的是http服务net模块创建的是tcp服务 简单的 no...

  • git+nodejs搭建web静态服务器

    搭建web静态服务器 创建项目根目录(或者从github仓库clone)并创建node项目 初始化 执行此步骤前提...

  • flask

    如何使用flask做vue的静态文件服务器? 原理: 让flask的静态文件与模板文件的根目录指向vue的静态文件...

  • Nginx笔记

    基本使用 添加一个静态文件服务器, 并以目录方式呈现

  • Node手把手构建静态文件服务器

    这篇文章主要将会通过node手把手的构建一个静态文件服务器,那么废话不多说,开发流程走起来,我们先看一下将要做的这...

网友评论

      本文标题:node 创建静态文件服务器

      本文链接:https://www.haomeiwen.com/subject/fqcugqtx.html