774

是否有 Node.js 即用型工具(随 一起安装npm),它可以帮助我通过 HTTP 将文件夹内容公开为文件服务器。

例如,如果我有

D:\Folder\file.zip
D:\Folder\file2.html
D:\Folder\folder\file-in-folder.jpg

然后开始D:\Folder\ node node-file-server.js 我可以通过

http://hostname/file.zip
http://hostname/file2.html
http://hostname/folder/file-in-folder.jpg

为什么我的节点静态文件服务器丢弃请求? 参考一些神秘的

标准 node.js 静态文件服务器

如果没有这样的工具,我应该使用什么框架?

相关: NodeJS 中的基本静态文件服务器

4

31 回答 31

1274

一个好的“即用型工具”选项可能是 http-server:

npm install http-server -g

要使用它:

cd D:\Folder
http-server

或者,像这样:

http-server D:\Folder

看看:https ://github.com/nodeapps/http-server

于 2013-05-03T02:48:41.357 回答
230

如果您不想使用现成的工具,您可以使用下面的代码,正如我在https://developer.mozilla.org/en-US/docs/Node_server_without_framework所展示的那样:

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

http.createServer(function (request, response) {
    console.log('request starting...');

    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';

    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;      
        case '.jpg':
            contentType = 'image/jpg';
            break;
        case '.wav':
            contentType = 'audio/wav';
            break;
    }

    fs.readFile(filePath, function(error, content) {
        if (error) {
            if(error.code == 'ENOENT'){
                fs.readFile('./404.html', function(error, content) {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                });
            }
            else {
                response.writeHead(500);
                response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
                response.end(); 
            }
        }
        else {
            response.writeHead(200, { 'Content-Type': contentType });
            response.end(content, 'utf-8');
        }
    });

}).listen(8125);
console.log('Server running at http://127.0.0.1:8125/');

更新 如果您需要从外部需求/文件访问您的服务器,您需要通过编写以下内容来克服您的 node.js 文件中的 CORS,正如我在之前的回答中提到的这里

// Website you wish to allow to connect
response.setHeader('Access-Control-Allow-Origin', '*');

// Request methods you wish to allow
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

// Request headers you wish to allow
response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
response.setHeader('Access-Control-Allow-Credentials', true);

更新

正如 Adrian 所提到的,在评论中,他在这里写了一个带有完整解释的 ES6 代码,我只是在下面重新发布了他的代码,以防代码因任何原因从原始站点中消失:

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const port = process.argv[2] || 9000;

http.createServer(function (req, res) {
  console.log(`${req.method} ${req.url}`);

  // parse URL
  const parsedUrl = url.parse(req.url);
  // extract URL path
  let pathname = `.${parsedUrl.pathname}`;
  // based on the URL path, extract the file extension. e.g. .js, .doc, ...
  const ext = path.parse(pathname).ext;
  // maps file extension to MIME typere
  const map = {
    '.ico': 'image/x-icon',
    '.html': 'text/html',
    '.js': 'text/javascript',
    '.json': 'application/json',
    '.css': 'text/css',
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.wav': 'audio/wav',
    '.mp3': 'audio/mpeg',
    '.svg': 'image/svg+xml',
    '.pdf': 'application/pdf',
    '.doc': 'application/msword'
  };

  fs.exists(pathname, function (exist) {
    if(!exist) {
      // if the file is not found, return 404
      res.statusCode = 404;
      res.end(`File ${pathname} not found!`);
      return;
    }

    // if is a directory search for index file matching the extension
    if (fs.statSync(pathname).isDirectory()) pathname += '/index' + ext;

    // read file from file system
    fs.readFile(pathname, function(err, data){
      if(err){
        res.statusCode = 500;
        res.end(`Error getting the file: ${err}.`);
      } else {
        // if the file is found, set Content-type and send data
        res.setHeader('Content-type', map[ext] || 'text/plain' );
        res.end(data);
      }
    });
  });


}).listen(parseInt(port));

console.log(`Server listening on port ${port}`);
于 2015-03-14T08:12:45.340 回答
86

对于希望在 NodeJS 脚本中运行服务器的人:

您可以使用expressjs/serve-static替换connect.static(从连接 3 开始不再可用):

myapp.js:

var http = require('http');

var finalhandler = require('finalhandler');
var serveStatic = require('serve-static');

var serve = serveStatic("./");

var server = http.createServer(function(req, res) {
  var done = finalhandler(req, res);
  serve(req, res, done);
});

server.listen(8000);

然后从命令行:

  • $ npm install finalhandler serve-static
  • $ node myapp.js
于 2014-07-04T13:16:14.770 回答
69

我知道它不是 Node,但我使用了 Python 的 SimpleHTTPServer:

python -m SimpleHTTPServer [port]

它运行良好,并带有 Python。

于 2013-05-02T14:49:01.540 回答
37

连接可能是您正在寻找的。

通过以下方式轻松安装:

npm install connect

那么最基本的静态文件服务器可以写成:

var connect = require('connect'),
    directory = '/path/to/Folder';

connect()
    .use(connect.static(directory))
    .listen(80);

console.log('Listening on port 80.');
于 2013-05-02T08:52:28.847 回答
29

从 npm@5.2.0npm开始,在通常的 npm 旁边安装一个新的二进制文件,称为npx. 所以现在,一个从当前目录创建静态 http 服务器的衬垫:

npx serve

或者

npx http-server
于 2020-01-10T09:50:22.957 回答
26

One-line™ 证明而不是承诺

在此处输入图像描述

第一个是http-serverhs-链接

npm i -g http-server   // install
hs C:\repos            // run with one line?? FTW!!

第二个是serveZEIT.co -链接

npm i -g serve         // install
serve C:\repos         // run with one line?? FTW!!

以下是可用的选项,如果这有助于您做出决定。

C:\Users\Qwerty>http-server --help
用法:http-server [路径] [选项]

选项:
  -p 要使用的端口 [8080]
  -a 地址使用 [0.0.0.0]
  -d 显示目录列表 [true]
  -i 显示自动索引 [true]
  -g --gzip 尽可能提供 gzip 文件 [false]
  -e --ext 如果没有提供默认文件扩展名 [无]
  -s --silent 禁止输出中的日志消息
  --cors[=headers] 通过“Access-Control-Allow-Origin”标头启用 CORS
                     可选择提供用逗号分隔的 CORS 标头列表
  -o [路径] 启动服务器后打开浏览器窗口
  -c 以秒为单位的缓存时间(max-age)[3600],例如 -c10 为 10 秒。
               要禁用缓存,请使用 -c-1。
  -U --utc 在日志消息中使用 UTC 时间格式。

  -P --proxy 如果请求无法解析,则备用代理。例如:http://someurl.com

  -S --ssl 启用 https。
  -C --cert ssl 证书文件的路径(默认值:cert.pem)。
  -K --key ssl 密钥文件的路径(默认值:key.pem)。

  -r --robots 响应 /robots.txt [User-agent: *\nDisallow: /]
  -h --help 打印此列表并退出。
C:\Users\Qwerty>服务 --help

  用法:serve.js [选项] [命令]

  命令:

    帮助 显示帮助

  选项:

    -a, --auth 在基本身份验证之后服务
    -c, --cache 在浏览器中缓存文件的时间(以毫秒为单位)
    -n, --clipless 不要将地址复制到剪贴板(默认禁用)
    -C, --cors Setup * CORS 标头允许来自任何来源的请求(默认禁用)
    -h, --help 输出使用信息
    -i, --ignore 要忽略的文件和目录
    -o, --open 在浏览器中打开本地地址(默认禁用)
    -p, --port 监听端口(默认为 5000)
    -S, --silent 不向控制台记录任何内容
    -s, --single 服务单页应用程序(将 `-c` 设置为 1 天)
    -t, --treeless 不显示静态树(默认禁用)
    -u, --unzipped 禁用 GZIP 压缩
    -v, --version 输出版本号

如果您需要注意更改,请参阅hostr,感谢Henry Tseng 的回答

于 2017-11-30T10:34:14.610 回答
25

使用 npm 安装 express:https ://expressjs.com/en/starter/installing.html

使用以下内容在 index.html 的同一级别创建一个名为 server.js 的文件:

var express = require('express');
var server = express();
server.use(express.static(__dirname));
server.listen(8080);

这将加载您的 index.html 文件。如果您希望指定要加载的 html 文件,请使用以下语法:

server.use('/', express.static(__dirname + '/myfile.html'));

如果您希望将其放在其他位置,请在第三行设置路径:

server.use('/', express.static(__dirname + '/public'));

CD 到包含您的文件的文件夹,并使用以下命令从控制台运行节点:

node server.js

浏览到本地主机:8080

于 2016-07-22T08:46:36.843 回答
17

#仅演示/原型服务器

如果这就是你所需要的,试试这个:

const fs = require('fs'),
      http = require('http'),
      arg = process.argv.slice(2),
      rootdir = arg[0] || process.cwd(),
      port = process.env.PORT || 9000,
      hostname = process.env.HOST || '127.0.0.1';
//tested on node=v10.19.0
http.createServer(function (req, res) {

  try {
    // change 'path///to/////dir' -> 'path/to/dir'
    req_url = decodeURIComponent(req.url).replace(/\/+/g, '/');

    stats = fs.statSync(rootdir + req_url);

    if (stats.isFile()) {
      buffer = fs.createReadStream(rootdir + req_url);
      buffer.on('open', () => buffer.pipe(res));
      return;
    }

    if (stats.isDirectory()) {
      //Get list of files and folder in requested directory
      lsof = fs.readdirSync(rootdir + req_url, {encoding:'utf8', withFileTypes:false});
      // make an html page with the list of files and send to browser
      res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
      res.end(html_page(`http://${hostname}:${port}`, req_url, lsof));
      return;
    }

  } catch (err) {
      res.writeHead(404);
      res.end(err);
      return;
  }
}).listen(port, hostname, () => console.log(`Server running at http://${hostname}:${port}`));


function html_page(host, req_url, lsof) {//this is a Function declarations can be called before it is defined
  // Add link to root directory and parent directory if not already in root directory
  list = req_url == '/' ? [] : [`<a href="${host}">/</a>`,
  `<a href="${host}${encodeURI(req_url.slice(0,req_url.lastIndexOf('/')))}">..</a>`];

  templete = (host, req_url, file) => {// the above is a Function expressions cannot be called before it is defined
    return `<a href="${host}${encodeURI(req_url)}${req_url.slice(-1) == '/' ? '' : '/'}${encodeURI(file)}">${file}</a>`; }

  // Add all the links to the files and folder in requested directory
  lsof.forEach(file => {
    list.push(templete(host, req_url, file));
  });

  return `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html" charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Directory of ${req_url}</title>
</head>
<body>
<h2>Directory of ${req_url}</h2>
${list.join('<br/>\n')}
</body>
</html>`
}
于 2017-05-25T19:57:38.430 回答
11

在普通的 node.js 中:

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

process.on('uncaughtException', err => console.error('uncaughtException', err))
process.on('unhandledRejection', err => console.error('unhandledRejection', err))

const publicFolder = process.argv.length > 2 ? process.argv[2] : '.'
const port = process.argv.length > 3 ? process.argv[3] : 8080

const mediaTypes = {
  zip: 'application/zip',
  jpg: 'image/jpeg',
  html: 'text/html',
  /* add more media types */
}

const server = http.createServer(function(request, response) {
  console.log(request.method + ' ' + request.url)

  const filepath = path.join(publicFolder, request.url)
  fs.readFile(filepath, function(err, data) {
    if (err) {
      response.statusCode = 404
      return response.end('File not found or you made an invalid request.')
    }

    let mediaType = 'text/html'
    const ext = path.extname(filepath)
    if (ext.length > 0 && mediaTypes.hasOwnProperty(ext.slice(1))) {
      mediaType = mediaTypes[ext.slice(1)]
    }

    response.setHeader('Content-Type', mediaType)
    response.end(data)
  })
})

server.on('clientError', function onClientError(err, socket) {
  console.log('clientError', err)
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})

server.listen(port, '127.0.0.1', function() {
  console.log('‍ Development server is online.')
})

这是一个简单的 node.js 服务器,它只为某个目录中的请求文件提供服务。

用法:

node server.js folder port

folder可能是绝对的或相对的,具体取决于server.js位置。默认值是.执行node server.js命令的目录。

port默认为 8080,但您可以指定操作系统中可用的任何端口。

在你的情况下,我会这样做:

cd D:\Folder
node server.js

您可以D:\Folder通过键入从浏览器浏览文件http://127.0.0.1:8080/somefolder/somefile.html

于 2019-11-28T11:55:17.257 回答
9

还有另一个非常好的静态 Web 服务器:browser-sync。

它可以使用节点包管理器下载:

npm install -g browser-sync

安装后,在 cmd 提示符下导航到项目文件夹,然后运行以下命令:

browser-sync start --server --port 3001 --files="./*"

它将开始处理浏览器当前文件夹中的所有文件。

可以从BrowserSync中找到更多信息

谢谢。

于 2016-01-12T02:37:22.670 回答
8

是我的单文件/轻量级 node.js 静态文件网络服务器宠物项目,我认为它是一个快速而丰富的工具,它的使用就像在 Linux/Unix/macOS 终端上发出这个命令一样简单(安装node.js(或Debian/Ubuntu)时,Android 上的 termux或termux :nodejs-legacy

curl pad.js.org | node 

(文档中的 Windows 用户存在不同的命令)

它支持我认为有用的不同事物,

  • 分层目录索引创建/服务
    • 具有不同标准的排序功能
    • 在 Chrome、Firefox 和其他浏览器上通过 [多文件] 拖放和文件/纯文本复制粘贴和系统剪贴板屏幕截图粘贴从浏览器上传可能有一些限制(可以通过命令行关闭)它提供的选项)
    • 文件夹/笔记创建/上传按钮
  • 为众所周知的文件类型提供正确的 MIME(可以禁用它)
  • 可以作为 npm 包和本地工具安装,或者作为 Docker 的永久服务进行单线性安装
  • HTTP 206 文件服务(多部分文件传输)以实现更快的传输
  • 从终端和浏览器控制台上传(实际上它最初的目的是作为其他页面/域上浏览器的 JS 控制台的文件系统代理)
  • CORS 下载/上传(也可以关闭)
  • 轻松的 HTTPS 集成
  • 用于实现更好安全服务的轻量级命令行选项:
    • 使用我在node.js 8上的补丁,您无需先安装即可访问这些选项:curl pad.js.org | node - -h
    • 或者首先将其安装为系统全局 npm 包[sudo] npm install -g pad.js,然后使用其安装版本来访问其选项:pad -h
    • 或者使用提供的 Docker 镜像,默认使用相对安全的选项。[sudo] docker run --restart=always -v /files:/files --name pad.js -d -p 9090:9090 quay.io/ebraminio/pad.js

使用该工具的文件夹索引的屏幕截图

上述功能主要记录在工具http://pad.js.org的主页上,通过我使用的一些不错的技巧,这也是工具源本身也提供服务的地方!

该工具源位于GitHub 上,欢迎您的反馈、功能请求和 ⭐!

于 2017-07-08T21:03:31.303 回答
7

您可以为此使用 NPM serve包,如果您不需要 NodeJS 的东西,它是一个快速且易于使用的工具:

1 - 在您的 PC 上安装软件包:

npm install -g serve

2 - 为您的静态文件夹服务serve <path>

d:> serve d:\StaticSite

它将向您显示正在为您的静态文件夹提供服务的端口,只需导航到主机,如下所示:

http://localhost:3000
于 2018-03-21T09:50:09.693 回答
7

我对这个页面上的任何答案都不太满意,但是,下面似乎可以解决问题。

添加server.js具有以下内容的文件:

const express = require('express')
const path = require('path')
const port = process.env.PORT || 3000
const app = express()

// serve static assets normally
app.use(express.static(__dirname + '/dist'))

// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'dist', 'index.html'))
})

app.listen(port)
console.log("server started on port " + port)

还要确保您需要express. 运行yarn add express --savenpm install express --save取决于您的设置(我可以推荐yarn它非常快)。

您可以更改dist为您提供内容的任何文件夹。对于我的简单项目,我没有从任何文件夹中提供服务,所以我只是删除了dist文件名。

然后你可以运行node server.js. 由于我必须将我的项目上传到 Heroku 服务器,我需要将以下内容添加到我的package.json文件中:

  "scripts": {
    "start": "node server.js"
  }
于 2017-12-12T11:37:22.977 回答
5

下面为我​​工作:

创建一个app.js包含以下内容的文件:

// app.js

var fs = require('fs'),
    http = require('http');

http.createServer(function (req, res) {
  fs.readFile(__dirname + req.url, function (err,data) {
    if (err) {
      res.writeHead(404);
      res.end(JSON.stringify(err));
      return;
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(8080);

创建一个index.html包含以下内容的文件:

Hi

启动命令行:

cmd

在下面运行cmd

node app.js

转到下面的 URL,在 chrome 中:

http://localhost:8080/index.html

就这样。希望有帮助。

来源:https ://nodejs.org/en/knowledge/HTTP/servers/how-to-serve-static-files/

于 2019-07-16T04:17:05.190 回答
4

如果您使用Express 框架,则此功能已准备就绪。

要设置一个简单的文件服务应用程序,只需执行以下操作:

mkdir yourapp
cd yourapp
npm install express
node_modules/express/bin/express
于 2013-05-02T08:52:08.110 回答
4

你可以试试为我服务

使用它非常简单:

ServeMe = require('serve-me')();
ServeMe.start(3000);

就这样。

PD:默认服务的文件夹是“public”。

于 2014-11-14T23:40:52.517 回答
4

这是另一个简单的 Web 服务器。

https://www.npmjs.com/package/hostr

安装

npm install -g hostr

更换工作总监

cd myprojectfolder/

并开始

hostr
于 2015-05-18T20:28:22.613 回答
4

看看那个链接

您只需要安装 express 模块node js

var express = require('express');
var app = express();

app.use('/Folder', express.static(__dirname + '/Folder'));

您可以访问您的文件,例如http://hostname/Folder/file.zip

于 2016-07-20T12:23:06.887 回答
4

为了使用节点服务静态资源来健康地提高性能,我建议使用Buffet。它的工作方式类似于 Web 应用程序加速器,也称为缓存 HTTP 反向代理,但它只是将所选目录加载到内存中。

Buffet 采用完全缓冲的方法——当你的应用程序启动时,所有文件都完全加载到内存中,所以你永远不会感觉到文件系统的烧毁。在实践中,这是非常有效的。如此之多以至于将 Varnish 放在您的应用程序前面甚至可能会使它变慢! 

我们在 codePile 站点上使用它,发现在 1k 并发用户连接负载下下载 25 个资源的页面上增加了约 700 个请求/秒到 >4k 个请求/秒。

例子:

var server = require('http').createServer();

var buffet = require('buffet')(root: './file'); 

 

server.on('request', function (req, res) {

  buffet(req, res, function () {

    buffet.notFound(req, res);

  });

});

 

server.listen(3000, function () {

  console.log('test server running on port 3000');

});
于 2015-12-13T22:57:50.447 回答
3

在 NPM 注册表https://npmjs.org/search?q=server中搜索,我找到了 static-server https://github.com/maelstrom/static-server

是否曾经需要向同事发送文件,但又不想通过电子邮件向 100MB 的野兽发送电子邮件?想要运行一个简单的示例 JavaScript 应用程序,但在通过 file:/// 协议运行它时遇到问题?想要在 LAN 上共享您的媒体目录,而无需设置 Samba、FTP 或其他任何需要您编辑配置文件的东西?那么这个文件服务器会让你的生活变得更轻松。

要安装简单的静态东西服务器,请使用 npm:

npm install -g static-server

然后提供文件或目录,只需运行

$ serve path/to/stuff
Serving path/to/stuff on port 8001

这甚至可以列出文件夹内容。

不幸的是,它无法提供文件:)

于 2013-05-02T10:56:34.747 回答
3

首先通过 -g 安装 node-static 服务器npm install node-static -g 是在你的系统上全局安装它,然后导航到你的文件所在的目录,启动服务器并static 监听端口 8080,导航到浏览器并输入 localhost:8080/yourhtmlfilename .

于 2016-02-02T22:45:26.080 回答
2

使用连接的简单静态服务器

var connect = require('connect'),
  directory = __dirname,
  port = 3000;

connect()
  .use(connect.logger('dev'))
  .use(connect.static(directory))
  .listen(port);

console.log('Listening on port ' + port);

另请参阅使用 node.js 作为简单的 Web 服务器

于 2014-01-23T09:57:33.163 回答
2

它还没有在 NPM 上,但是我在 Express 上构建了一个简单的静态服务器,它还允许您接受表单提交并通过事务性电子邮件服务(现在是 Sendgrid,Mandrill 即将到来)通过电子邮件发送它们。

https://github.com/jdr0dn3y/nodejs-StatServe

于 2014-03-31T12:49:10.350 回答
2

为了搜索者的利益,我喜欢 Jakub g 的回答,但想要一些错误处理。显然最好正确处理错误,但这应该有助于防止站点在发生错误时停止。下面的代码:

var http = require('http');
var express = require('express');

process.on('uncaughtException', function(err) {
  console.log(err);
});

var server = express();

server.use(express.static(__dirname));

var port = 10001;
server.listen(port, function() { 
    console.log('listening on port ' + port);     
    //var err = new Error('This error won't break the application...')
    //throw err
});
于 2015-06-23T13:47:56.383 回答
1

对于开发工作,您可以使用(表达 4) https://github.com/appsmatics/simple-httpserver.git

于 2015-08-10T01:23:54.313 回答
1

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


let mimeTypes = {
  '.html': 'text/html',
  '.css': 'text/css',
  '.js': 'text/javascript',
  '.jpg': 'image/jpeg',
  '.png': 'image/png',
  '.ico': 'image/x-icon',
  '.svg': 'image/svg+xml',
  '.eot': 'appliaction/vnd.ms-fontobject',
  '.ttf': 'aplication/font-sfnt'
};



http.createServer(function (request, response) {
  let pathName = url.parse(request.url).path;
  if(pathName === '/'){
    pathName = '/index.html';
  }
  pathName = pathName.substring(1, pathName.length);
  let extName = path.extName(pathName);
  let staticFiles = `${__dirname}/template/${pathName}`;

      if(extName =='.jpg' || extName == '.png' || extName == '.ico' || extName == '.eot' || extName == '.ttf' || extName == '.svg')
      {
          let file = fr.readFileSync(staticFiles);
          res.writeHead(200, {'Content-Type': mimeTypes[extname]});
          res.write(file, 'binary');
          res.end();
      }else {
        fs.readFile(staticFiles, 'utf8', function (err, data) {
          if(!err){
            res.writeHead(200, {'Content-Type': mimeTypes[extname]});
            res.end(data);
          }else {
            res.writeHead(404, {'Content-Type': 'text/html;charset=utf8'});
            res.write(`<strong>${staticFiles}</strong>File is not found.`);
          }
          res.end();
        });
      }
}).listen(8081);

于 2016-02-23T13:27:51.213 回答
0

我在工作和个人项目中使用休斯顿,它对我很有效。

https://github.com/alejandro/Houston

于 2013-05-02T14:29:34.173 回答
0

如果您对没有任何先决条件的超轻型 http 服务器感兴趣,您应该看看:mongoose

于 2016-04-12T08:50:15.910 回答
0

您还询问了为什么请求下降 - 不确定您的具体原因是什么,但总的来说,您可以使用专用中间件(nginx、S3、CDN)更好地服务器静态内容,因为 Node 并没有针对这种网络模式进行优化。请参阅此处的进一步说明(第 13 条): http: //goldbergyoni.com/checklist-best-practice-of-node-js-in-production/

于 2017-07-06T19:39:54.970 回答
0

Node.js 上的小型命令行 Web 服务器:miptleha-http

完整的源代码(80 行)

于 2019-09-20T16:13:24.790 回答