节点http-server用index.html响应任何请求
我已经在全球安装了http-server
。节点http-server用index.html响应任何请求
我启动它从MYDIR本地主机端口8080上。在MYDIR我有index.html
。
如果我请求(从浏览器)我得到index.html,这是OK的。
如果我要求http://localhost:8080/anything
我没有收到服务器的回应。
我想什么,相反,是我的服务器总是index.html的任何HTTP请求到达本地主机端口8080上
这是可能的响应。
在此先感谢
是有,与-P
/--proxy
选项:
http-server -P http://localhost:8080/
注意任何错误,包括404,会重定向到您的索引,不只是缺少路径。
不幸的是,当我按照你的建议(在浏览器上)得到以下消息时,“本网站无法到达”和“本地主机拒绝连接”。和'ERR_CONNECTION_REFUSED'。在服务器上,我看到一个以服务器自身结束的请求流抛出错误'错误:套接字挂断' – Picci
我不知道'http-server',但因为任何错误都被重定向到索引,我假设你有直到客户放弃为止。 我个人会像@rsp那样做,用快递写你自己的小型服务器,它也很容易和快速。 – DrakaSAN
是的。访问'http:// localhost:8080/anything'会重定向到'http:// localhost:8080/anything'等等。 '--proxy'选项取主机名和端口后的部分,并将其附加到给定的代理主机/端口。 –
有时,特殊情况下像这样的,这是很容易写你自己的服务器:
'use strict';
var host = '127.0.0.1', port = 3333;
var path = require('path');
var app = require('express')();
app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));
app.listen(port,() => console.log(`Listening on http://${host}:${port}/`));
但是请记住,如果每一个路径,然后返回index.html
在index.html
不能引用图像等东西,风格工作表或客户端JavaScript文件。不仅可以使用上面显示的代码,而且可以使用向每个请求发送相同响应(index.html
)的任何解决方案。
您可能需要作出一些例外,它并不难使用快递:
'use strict';
var host = '127.0.0.1', port = 3333;
var path = require('path');
var app = require('express')();
app.get('/x.png', (req, res) => res.sendFile(path.join(__dirname, 'x.png')));
app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));
app.listen(port,() => console.log(`Listening on http://${host}:${port}/`));
只要记住,异常得去上,因为第一个匹配的路由将被用于给定的请求。
当然你需要保存这个代码,例如到app.js
,安装快捷:
npm install express
,并启动它:
node app.js
这比使用现成的解决方案更复杂(虽然,正如你所看到的,并不复杂要么),但你有多大您希望如何表现的更多灵活性。它也很容易添加日志记录等
使用Express 4.x简单和直接的例子:
var express = require('express');
var app = express();
var path = __dirname + '/public';
var port = 8080;
app.use(express.static(path));
app.get('*', function(req, res) {
res.sendFile(path + '/index.html');
});
app.listen(port);
此实现总是以index.html
回应,如果没有找到该请求的文件,这是几乎一样使用简单http-server
,它没有这个选项。
为了达到你所要求的,我建议你live-server而不是http-server。
live-server --port=8080 --entry-file=./index.html
活服务器还提供了热重装,但它不是你的要求
无法正常工作。 HTTP服务器直接工作。 – mythicalcoder
谢谢 - 这节省了我一些时间:) –
'-P或--proxy代理不能在本地解析到给定URL的所有请求之一。例如:-P http:// someurl.com' =>你可以试试'http-server -P http:// localhost:8080 /'? – DrakaSAN
因此在[我的答案](http://stackoverflow.com/questions/39744309/node-http-server-to-respond-with-index-html-to-any-request/39744827#39744827)中的解决方案工作为你? – rsp