Node.js的快速文件服务器(静态文件通过HTTP)Node.js的快速文件服务器(静态文件通过H

2019-05-08 15:01发布

有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静态文件服务器

Answer 1:

一个好的“准备使用的工具”选项可能是HTTP服务器:

npm install http-server -g

要使用它:

cd D:\Folder
http-server

或者说,是这样的:

http-server D:\Folder

检查出来: https://github.com/nodeapps/http-server



Answer 2:

如果你不希望使用现成的工具,你可以使用下面的代码,如我在证明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/');

UPDATE如果您需要从外部需求/文件访问您的服务器,你需要克服CORS,在你的Node.js文件中写入以下,正如我在前面的回答中提到这里

// 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);

UPDATE

阿德里安提到,在评论中,他写了一个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 extention. e.g. .js, .doc, ...
  const ext = path.parse(pathname).ext;
  // maps file extention 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 extention
    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}`);


Answer 3:

对于人们想要一台服务器可运行的脚本的NodeJS内:

您可以使用expressjs /服务静电它取代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


Answer 4:

我知道这不是节点,但我使用Python的SimpleHTTPServer:

python -m SimpleHTTPServer [port]

它运作良好,并配备了Python。



Answer 5:

连接可能是你在找什么。

与易于安装:

npm install connect

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

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

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

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


Answer 6:

安装使用NPM快递: 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);

如果你希望把它放在一个不同的位置,设置在第三行的路径:

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

CD包含文件和运行节点使用下列命令控制台的文件夹:

node server.js

浏览到本地主机:8080



Answer 7:

DEMO / PROTO Server只

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

const http = require('http');
const fs = require('fs');
const port = 3000;
const app = http.createServer((req,res) => {
    res.writeHead(200);
    if (req.url === '/') req.url = '/index.html'; // courtesy of @JosephCho
    res.end(fs.readFileSync(__dirname + req.url));
});

app.listen(port);

注意:您需要使用“/index.htm”明明是你的地址,即部分“ HTTP://本地主机:3000 / index.html的 ”



Answer 8:

还有的是,是相当不错的另一个静态Web服务器:浏览器同步。

它可以通过节点包管理器下载:

npm install -g browser-sync

安装完成后,导航到项目文件夹中的命令提示符,只是运行以下命令:

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

这将启动餐饮在浏览器当前文件夹中的所有文件。

更可以从发现BrowserSync

谢谢。



Answer 9:

单行™证明而非承诺

首先是http-serverhs - 链接

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

第二是serve的ZEIT.co - 链接

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

以下是可用选项,如果这是可以帮助你决定。

C:\Users\Qwerty>http-server --help
usage: http-server [path] [options]

options:
  -p           Port to use [8080]
  -a           Address to use [0.0.0.0]
  -d           Show directory listings [true]
  -i           Display autoIndex [true]
  -g --gzip    Serve gzip files when possible [false]
  -e --ext     Default file extension if none supplied [none]
  -s --silent  Suppress log messages from output
  --cors[=headers]   Enable CORS via the "Access-Control-Allow-Origin" header
                     Optionally provide CORS headers list separated by commas
  -o [path]    Open browser window after starting the server
  -c           Cache time (max-age) in seconds [3600], e.g. -c10 for 10 seconds.
               To disable caching, use -c-1.
  -U --utc     Use UTC time format in log messages.

  -P --proxy   Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com

  -S --ssl     Enable https.
  -C --cert    Path to ssl cert file (default: cert.pem).
  -K --key     Path to ssl key file (default: key.pem).

  -r --robots  Respond to /robots.txt [User-agent: *\nDisallow: /]
  -h --help    Print this list and exit.
C:\Users\Qwerty>serve --help

  Usage: serve.js [options] [command]

  Commands:

    help  Display help

  Options:

    -a, --auth      Serve behind basic auth
    -c, --cache     Time in milliseconds for caching files in the browser
    -n, --clipless  Don't copy address to clipboard (disabled by default)
    -C, --cors      Setup * CORS headers to allow requests from any origin (disabled by default)
    -h, --help      Output usage information
    -i, --ignore    Files and directories to ignore
    -o, --open      Open local address in browser (disabled by default)
    -p, --port   Port to listen on (defaults to 5000)
    -S, --silent    Don't log anything to the console
    -s, --single    Serve single page applications (sets `-c` to 1 day)
    -t, --treeless  Don't display statics tree (disabled by default)
    -u, --unzipped  Disable GZIP compression
    -v, --version   Output the version number

如果你需要看的更改,请参阅hostr ,信用亨利曾雅妮的答案



Answer 10:

如果您使用的快递框架 ,这个功能都准备好了。

要设置一个简单的文件服务应用程序只是这样做:

mkdir yourapp
cd yourapp
npm install express
node_modules/express/bin/express


Answer 11:

这是我的一个文件/轻量级的Node.js静态文件的Web服务器的宠物,无依赖性,我相信这是一个快速和丰富的工具,它的用途是作为你的Linux / Unix / MacOS的终端上发出此命令一样简单(项目或termux时的node.js(或在Android) nodejs-legacy在Debian / Ubuntu的)安装:

curl pad.js.org | node 

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

它支持不同的东西,我相信可以找到有用的,

  • 分层目录索引创建/服务
    • 随着对不同的标准排序能力
    • 通过[多文件]拖动和拖放和文件/文本只复制,粘贴和系统剪贴板的屏幕截图贴在Chrome,Firefox和其他可能的浏览器有一些限制(可以通过命令行关闭从浏览器上传选项提供)
    • 文件夹/音符创建/上传按钮
  • 服务于众所周知的文件类型正确的MIME的(有可能有助于禁用)
  • 安装的可能性为NPM包和本地工具或,一个线性安装与泊坞永久服务
  • HTTP 206文件服务(多文件传输)的传输速度更快
  • 从终端和浏览器控制台上传(其实它最初的目的是为在其他页/域浏览器的JS控制台中的文件系统代理)
  • CORS下载/上传(其也可以被关闭)
  • 易HTTPS整合
  • 为实现更好的安全与它服务的轻量级命令行选项:
    • 随着我对补丁的node.js 8 ,你可以访问,而无需先安装选项: curl pad.js.org | node - -h curl pad.js.org | node - -h
    • 或者,首先它安装为系统全局NPM包由[sudo] npm install -g pad.js ,然后使用其安装的版本访问它的选项: pad -h
    • 或者用它默认使用相对安全的选项所提供的泊坞窗图像。 [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上哪个欢迎您的反馈,功能要求和⭐s!



Answer 12:

我还没有与任何此页面上的答案多少运气,但是,下面似乎这样的伎俩。

添加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"
  }


Answer 13:

对于使用节点为静态资源的性能增进健康,我建议使用自助 。 它可以作为一个Web应用加速器也被称为缓存HTTP反向代理类似,但它只是加载所选目录到内存中。

自助采取完全bufferred方法 - 所有文件都被完全加载到内存中,当你的应用程序启动,所以你永远不会觉得文件系统的烧伤。 在实践中,这是非常有效的。 正因如此,将光油在您的应用程序的前面,甚至可能会使它更慢!

我们用它在codePile网站,发现〜700requests /秒的增加是下载一个1K并发用户连接负载下25个资源页面上> 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');

});


Answer 14:

采取一看链接 。

你只需要安装的Express模块node js

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

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

您可以访问您的文件中像HTTP://hostname/Folder/file.zip



Answer 15:

你可以尝试发球,我

使用它是那么容易:

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

就这样。

PD:默认情况下,所服务的文件夹为“公共”。



Answer 16:

这里还有一个简单的Web服务器。

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

安装

npm install -g hostr

更改工作主任

cd myprojectfolder/

并开始

hostr


Answer 17:

这是不是在NPM,但是,但是我建立在快速简单的静态服务器还允许您接受表单提交,并通过交易电子邮件服务给他们发邮件(Sendgrid现在,山魈推出)。

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



Answer 18:

对于搜索者的利益,我喜欢的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
});


Answer 19:

首先通过安装节点静态服务器npm install node-static -g -g是安装它的全球系统,然后导航至您的文件所在的目录,与启动服务器static侦听端口8080,naviaget到浏览器和输入localhost:8080 / yourhtmlfilename。



Answer 20:

 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); 



Answer 21:

在NPM注册表中搜索https://npmjs.org/search?q=server ,我发现静态服务器https://github.com/maelstrom/static-server

曾经需要发送一个同事一个文件,但不能被人打扰通过电子邮件发送100MB兽? 想运行一个简单的例子JavaScript应用,但与通过文件运行它的问题:///协议? 想分享在LAN媒体目录没有安装Samba,或者FTP,或其他任何需要您编辑配置文件? 然后,此文件服务器将使你的生活,更轻松一点。

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

 npm install -g static-server 

然后服务于文件或目录,只需运行

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

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

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



Answer 22:

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

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服务器



Answer 23:

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



Answer 24:

如果你是在超轻型HTTP服务器intrested没有任何先决条件,你应该看看: 猫鼬



Answer 25:

您可以使用NPM 服务包对于这一点,如果你不需要的东西的NodeJS它是一个快速和易于使用的工具:

1 - 您的电脑上安装该软件包:

npm install -g serve

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

d:> serve d:\StaticSite

它会告诉你你的静态文件夹被服务的端口,只需浏览到主机,如:

http://localhost:3000


Answer 26:

我用休斯顿在工作和个人项目,它很适合我。

https://github.com/alejandro/Houston



Answer 27:

你还问我为什么要求都在不断下降 - 不知道什么对你的情况的具体原因,但整体你更好的服务器的静态内容使用专用的中间件(nginx的,S3,CDN),因为节点是真的不为这种网络模式进行了优化。 看到这里进一步的解释(子弹13): http://goldbergyoni.com/checklist-best-practice-of-node-js-in-production/



文章来源: Node.js quick file server (static files over HTTP)