如何正确启动http服务器并在不同文件夹中托管许多源文件

问题描述

因此,问题是: 我需要为正在运行的应用托管一些文件,以便从HTTP服务器获得所有响应。如果我在源文件夹中启动HTTP服务器-则一切正常,我可以获取所有文件。但是我需要在源文件夹上方启动HTTP服务器,因为我有很多服务器。假设我有100个不同的源文件夹。这是否意味着我需要启动100台服务器?为了避免这种情况,我想运行单个全局HTTP服务器。另外,我在源文件夹中有映射,该映射将路径(硬编码)提供给资源,并且此路径从源文件夹开始,例如:source / some_file.png 如果我在此目录中运行服务器,则可以访问url上的文件 http:// localhost:8083 / some_file.png。 但是,如果我在上面的文件夹中启动服务器,例如:main_dir / source,则无法访问文件http:// localhost:8083 / some_file.png。而且我的响应失败,错误代码404。 我试图拦截请求并注入路径文件夹,以便获得URL文件地址http:// localhost:8083 / source / some_file.png。它正在工作,但是然后我有不同的错误。 可能还有其他方法来启动全局http服务器并访问路径下面的一个文件夹中的文件吗?

解决方法

我找到了一个有关使用内置于服务器doc中的NodeJS来提供文件的文档。 因此,有两种可能性:

  • 使用列表自己提供文件
const fs = require('fs');
const http = require('http');

const folderArray = ["main_dir","another_dir",...];

http.createServer(function (req,res) {

  folderArray.forEach((folder) => {
  try {
    fs.accessSync(`${folder}/${}req.url` /* Change req.url for your url or parameter */,fs.constants.F_OK);
    console.log('File exists');
    const data = fs.readFileSync(`${folder}/${}req.url`); // Handle this error correctly
    res.writeHead(200);
    res.end(data);
    // You would want to break the loop here as it's already served. 
  } catch (err) {
    console.error('No file!');
  }
  });
}).listen(8080);
  • 或者让模块为您完成此操作:node-static(当然,请使用文件夹数组:D修改服务器文件夹)。

如果要下载文件,请查看以下答案:download file with express

干杯?!