Nodejs中如何配置静态资源的引入路径(不用express)

Nodejs中如何配置静态资源的引入路径(不用express)

3 回复

Nodejs中如何配置静态资源的引入路径(不用express)

在Node.js中,如果你不使用Express框架,仍然可以通过原生模块http来创建一个HTTP服务器,并且配置静态资源的引入路径。以下是一个简单的示例,展示如何设置静态资源目录并提供文件服务。

步骤1: 创建基本的HTTP服务器

首先,我们需要创建一个基本的HTTP服务器来处理请求。我们使用Node.js内置的http模块来实现这一点。

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) => {
  // 处理根路径
  if (req.url === '/') {
    serveFile('/index.html', res);
  } else {
    // 处理其他静态资源请求
    const filePath = path.join(__dirname, req.url);
    fs.readFile(filePath, (err, data) => {
      if (err) {
        res.writeHead(404, { 'Content-Type': 'text/plain' });
        res.end('Not Found');
      } else {
        res.writeHead(200, { 'Content-Type': getContentType(req.url) });
        res.end(data);
      }
    });
  }
});

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

function serveFile(filePath, res) {
  const fullPath = path.join(__dirname, filePath);
  fs.readFile(fullPath, (err, data) => {
    if (err) {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Not Found');
    } else {
      res.writeHead(200, { 'Content-Type': getContentType(filePath) });
      res.end(data);
    }
  });
}

function getContentType(url) {
  const extname = String(path.extname(url)).toLowerCase();
  const mimeTypes = {
    '.html': 'text/html',
    '.css': 'text/css',
    '.js': 'application/javascript',
    '.json': 'application/json',
    '.jpg': 'image/jpeg',
    '.png': 'image/png'
  };
  return mimeTypes[extname] || 'application/octet-stream';
}

解释

  • 基本HTTP服务器:我们使用http.createServer()创建了一个HTTP服务器。
  • 根路径处理:当用户访问根路径(例如/)时,我们调用serveFile('/index.html', res)来提供index.html文件。
  • 静态资源处理:对于其他路径,我们根据请求的URL构造文件路径,并使用fs.readFile()读取文件内容。
  • 错误处理:如果文件不存在,返回404状态码和“Not Found”消息。
  • 内容类型getContentType()函数根据文件扩展名确定正确的MIME类型。

通过这种方式,你可以在不使用Express的情况下为Node.js应用配置静态资源的引入路径。


if(index of(’.’)>0) 的路由判断 //比较蠢又实用的方法

Node.js 中如何配置静态资源的引入路径(不用 Express)

在 Node.js 中引入静态资源时,通常会使用一些流行的库,比如 http-server 或者自己手动创建一个 HTTP 服务器。这里我们将展示如何手动创建一个简单的 HTTP 服务器,并配置静态资源的引入路径。

示例代码

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

// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {
    // 获取请求路径
    const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);

    // 读取文件并发送给客户端
    fs.readFile(filePath, (err, data) => {
        if (err) {
            // 如果文件不存在,则返回404错误
            res.writeHead(404);
            res.end('Not Found');
        } else {
            // 设置响应头
            res.writeHead(200, { 'Content-Type': 'text/html' });
            res.end(data);
        }
    });
});

// 监听端口
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 导入必要的模块

    • http 模块用于创建 HTTP 服务器。
    • fs 模块用于读取文件。
    • path 模块用于处理路径。
  2. 创建 HTTP 服务器

    • 使用 http.createServer 方法创建一个服务器实例。
    • 提供一个回调函数来处理每个请求。
  3. 解析请求路径

    • 使用 req.url 获取请求路径,并根据需要拼接完整的文件路径。
    • 如果请求路径为空(即根路径),默认加载 index.html 文件。
  4. 读取文件并发送响应

    • 使用 fs.readFile 读取文件内容。
    • 如果文件存在,则设置响应头并将文件内容发送给客户端。
    • 如果文件不存在,则返回 404 错误。
  5. 监听端口

    • 使用 server.listen 方法监听指定端口(本例中为 3000)。

通过这种方式,你可以手动创建一个 HTTP 服务器,并为静态资源提供服务。如果你有更多的需求,比如支持不同的 MIME 类型或更复杂的路径处理逻辑,可以在此基础上进行扩展。

回到顶部