有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-server
, hs
- 链接
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 --save
或npm 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)