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

2020-06-17 05:51:05易采站长站整理

使用 Node 的内置模块,创建一个可以访问目录的静态资源服务器,支持fs文件读取,资源压缩与缓存等。

一、创建 HTTP Server 服务器

Node 的 http 模块提供 HTTP 服务器和客户端接口,通过

require('http')
使用。

先创建一个简单的 http server。配置参数如下:


// server/config.js
module.exports = {
root: process.cwd(),
host: '127.0.0.1',
port: '8877'
}

process.cwd()方法返回 Node.js 进程的当前工作目录,和 Linus 命令

pwd
功能一样,

Node 服务器每次收到 HTTP 请求后都会调用 http.createServer() 这个回调函数,每次收一条请求,都会先解析请求头作为新的 request 的一部分,然后用新的 request 和 respond 对象触发回调函数。以下创建一个简单的 http 服务,先默认响应的 status 为 200:


// server/http.js
const http = require('http')
const path = require('path')

const config = require('./config')

const server = http.createServer((request, response) => {
let filePath = path.join(config.root, request.url)
response.statusCode = 200
response.setHeader('content-type', 'text/html')
response.write(`<html><body><h1>Hello World! </h1><p>${filePath}</p></body></html>`)
response.end()
})

server.listen(config.port, config.host, () => {
const addr = `http://${config.host}:${config.port}`
console.info(`server started at ${addr}`)
})

客户端请求静态资源的地址可以通过

request.url
获得,然后使用 path 模块拼接资源的路径。

执行

$ node server/http.js
后访问 http://127.0.0.1 :8877/ 后的任意地址都会显示该路径:

每次修改服务器响应内容,都需要重新启动服务器更新,推荐自动监视更新自动重启的插件supervisor,使用supervisor启动服务器。


$ npm install supervisor -D
$ supervisor server/http.js

二、使用 fs 读取资源文件

我们的目的是搭建一个静态资源服务器,当访问一个到资源文件或目录时,我们希望可以得到它。这时就需要使用 Node 内置的 fs 模块读取静态资源文件,

使用

fs.stat()
读取文件状态信息,通过回调中的状态
stats.isFile()
判断文件还是目录,并使用
fs.readdir()
读取目录中的文件名