基于Nodejs的静态文件服务器,已实现,欢迎拍砖

基于Nodejs的静态文件服务器,已实现,欢迎拍砖

https://github.com/yinuoba/static_server

2 回复

当然可以。以下是一个基于Node.js的简单静态文件服务器的实现示例,附带GitHub链接。这个示例将帮助你快速搭建一个静态文件服务器,并且提供了一些基本的配置和功能。

示例代码

首先,确保你已经安装了Node.js。然后创建一个新的项目目录并初始化:

mkdir static_server
cd static_server
npm init -y

接下来,安装必要的依赖包 httppath(这些是Node.js内置模块,所以不需要额外安装)。

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

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);
    
    // 检查文件是否存在
    fs.access(filePath, fs.constants.F_OK, (err) => {
        if (err) {
            // 文件不存在,返回404错误
            res.writeHead(404, { 'Content-Type': 'text/plain' });
            res.end('404 Not Found');
        } else {
            // 文件存在,读取文件并发送给客户端
            fs.readFile(filePath, (err, data) => {
                if (err) {
                    res.writeHead(500, { 'Content-Type': 'text/plain' });
                    res.end('Internal Server Error');
                } else {
                    // 确定文件类型
                    let contentType = 'text/plain';
                    switch (path.extname(filePath)) {
                        case '.html':
                            contentType = 'text/html';
                            break;
                        case '.css':
                            contentType = 'text/css';
                            break;
                        case '.js':
                            contentType = 'application/javascript';
                            break;
                        case '.json':
                            contentType = 'application/json';
                            break;
                        case '.png':
                            contentType = 'image/png';
                            break;
                        case '.jpg':
                            contentType = 'image/jpeg';
                            break;
                        // 可以继续添加更多文件类型
                    }
                    res.writeHead(200, { 'Content-Type': contentType });
                    res.end(data);
                }
            });
        }
    });
});

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

运行服务器

保存上述代码到 server.js 文件中,然后运行:

node server.js

现在,你可以通过访问 http://localhost:3000/ 来查看你的静态文件服务器是否正常工作。如果目录中有 index.html 文件,它将被显示出来;否则,会显示该目录下的其他文件。

GitHub链接

GitHub Repository

希望这个简单的示例能帮助你搭建一个基础的静态文件服务器!如果有任何问题或建议,欢迎留言讨论。


基于Node.js的静态文件服务器可以使用内置的http模块以及fs模块来实现。下面提供一个简单的静态文件服务器的示例代码,它能够读取指定目录下的文件,并通过HTTP响应发送给客户端。

示例代码

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

// 静态文件存放目录
const STATIC_PATH = path.join(__dirname, 'public');

const server = http.createServer((req, res) => {
    let filePath = path.join(STATIC_PATH, req.url === '/' ? 'index.html' : req.url);

    // 检查文件是否存在
    fs.access(filePath, fs.constants.F_OK, (err) => {
        if (err) {
            // 文件不存在,则返回404错误
            res.writeHead(404);
            res.end('404 Not Found');
        } else {
            // 文件存在,读取文件内容
            fs.readFile(filePath, (err, data) => {
                if (err) {
                    // 文件读取失败,返回500错误
                    res.writeHead(500);
                    res.end('500 Internal Server Error');
                } else {
                    // 文件读取成功,返回文件内容
                    res.writeHead(200);
                    res.end(data);
                }
            });
        }
    });
});

server.listen(3000, () => {
    console.log('Static file server is running on port 3000');
});

解释

  1. 导入模块:我们导入了httpfspath模块。http用于创建HTTP服务器,fs用于访问文件系统,path用于处理路径。

  2. 设置静态文件目录STATIC_PATH变量指定了静态文件存放的目录。

  3. 创建HTTP服务器:使用http.createServer创建一个服务器实例。当接收到请求时,服务器将根据请求的URL查找对应的文件。

  4. 文件访问检查:使用fs.access检查文件是否存在。如果文件不存在,则返回404状态码。

  5. 读取并返回文件内容:如果文件存在,则使用fs.readFile读取文件内容,并将其作为HTTP响应返回给客户端。如果读取过程中出现错误,则返回500状态码。

  6. 监听端口:最后,让服务器监听3000端口。

该示例展示了一个非常基础的静态文件服务器实现。你可以在此基础上添加更多的功能,如支持不同的HTTP方法(GET、POST等)、处理更复杂的文件路径解析逻辑、增加缓存机制等。希望这能帮到你!

回到顶部