Nodejs 有时候需要一个小的开发用的静态文本 web server, 就写了一个

Nodejs 有时候需要一个小的开发用的静态文本 web server, 就写了一个

用 mustache 产生 html 文件。

https://github.com/leapon/smallweb

2 回复

当然可以。以下是一个简单的 Node.js 静态文件 Web 服务器的实现,并附带一些简短的解释。

示例代码

首先,我们需要安装 http 模块来创建 HTTP 服务器,以及 path 模块来处理路径相关的操作。以下是完整的代码:

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

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) {
      res.statusCode = 404;
      res.end('File not found');
    } else {
      fs.readFile(filePath, (err, data) => {
        if (err) {
          res.statusCode = 500;
          res.end('Internal Server Error');
        } else {
          res.statusCode = 200;
          res.setHeader('Content-Type', 'text/html');
          res.end(data);
        }
      });
    }
  });
});

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

代码解释

  1. 引入模块

    • http:用于创建 HTTP 服务器。
    • path:用于处理路径相关的操作。
    • fs:用于读取文件系统中的文件。
  2. 定义服务器配置

    • hostname:服务器的 IP 地址(本地为 127.0.0.1)。
    • port:服务器监听的端口(这里使用 3000)。
  3. 创建 HTTP 服务器

    • 使用 http.createServer() 方法创建一个 HTTP 服务器,并传入一个回调函数来处理请求。
    • 在回调函数中,我们根据请求的 URL 来确定要访问的文件路径。
    • 使用 fs.access() 方法检查文件是否存在。如果不存在,则返回 404 错误。
    • 如果文件存在,使用 fs.readFile() 方法读取文件内容,并将内容发送回客户端。
  4. 启动服务器

    • 使用 server.listen() 方法启动服务器,并输出一条消息表示服务器已启动。

使用方法

你可以将上述代码保存到一个文件(例如 server.js),然后运行 node server.js 启动服务器。默认情况下,服务器会监听 http://127.0.0.1:3000/。你可以在浏览器中访问该地址,查看 index.html 文件的内容。

如果你有其他静态文件,也可以通过修改 URL 访问它们。例如,访问 http://127.0.0.1:3000/sample.html 将会读取 sample.html 文件并显示其内容。

希望这个示例对你有所帮助!


回答

在开发过程中,我们有时需要一个简单的静态文本 Web 服务器来快速查看一些 HTML 页面。这种情况下,我们可以使用 Node.js 来创建一个小型的静态文件服务器。

以下是一个简单的示例代码,用于创建一个可以提供静态文件(如 HTML、CSS 和 JavaScript 文件)的服务:

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);
    const extname = String(path.extname(filePath)).toLowerCase();
    const mimeTypes = {
        '.html': 'text/html',
        '.js': 'text/javascript',
        '.css': 'text/css',
        '.json': 'application/json',
        '.png': 'image/png',
        '.jpg': 'image/jpg',
        '.gif': 'image/gif',
        '.svg': 'image/svg+xml',
        '.wav': 'audio/wav',
        '.mp4': 'video/mp4',
        '.woff': 'application/font-woff',
        '.ttf': 'font/ttf',
        '.eot': 'application/vnd.ms-fontobject',
        '.otf': 'font/otf',
        '.wasm': 'application/wasm'
    };

    let contentType = mimeTypes[extname] || 'application/octet-stream';

    fs.readFile(filePath, (err, content) => {
        if (err) {
            if (err.code == 'ENOENT') {
                fs.readFile(path.join(__dirname, '404.html'), (err, content) => {
                    res.writeHead(404, { 'Content-Type': 'text/html' });
                    res.end(content, 'utf-8');
                });
            } else {
                res.writeHead(500);
                res.end(`Server Error: ${err.code}`);
            }
        } else {
            res.writeHead(200, { 'Content-Type': contentType });
            res.end(content, 'utf-8');
        }
    });
});

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

这段代码中,我们首先引入了 httpfspath 模块。http 模块用于创建 HTTP 服务器,fs 模块用于读取文件系统中的文件,而 path 模块用于处理路径。然后我们定义了一个 HTTP 服务器,该服务器会根据请求的 URL 路径读取对应的文件,并返回相应的 MIME 类型。如果请求的文件不存在,则返回 404 错误页面。

你可以将此代码保存为 server.js 并运行它 (node server.js),然后在浏览器中访问 http://localhost:3000/ 即可看到你的静态文件。

此外,如果你希望使用 Mustache 模板引擎生成 HTML 文件,可以在服务器中添加模板解析逻辑。例如,在读取文件时检查文件扩展名是否为 .mustache,如果是,则使用 Mustache 渲染模板并返回渲染后的结果。这样你就可以使用 Mustache 模板动态生成 HTML 文件。

回到顶部