节点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上

这是可能的响应。

在此先感谢

+0

'-P或--proxy代理不能在本地解析到给定URL的所有请求之一。例如:-P http:// someurl.com' =>你可以试试'http-server -P http:// localhost:8080 /'? – DrakaSAN

+0

因此在[我的答案](http://stackoverflow.com/questions/39744309/node-http-server-to-respond-with-index-html-to-any-request/39744827#39744827)中的解决方案工作为你? – rsp

是有,与-P/--proxy选项:

http-server -P http://localhost:8080/ 

注意任何错误,包括404,会重定向到您的索引,不只是缺少路径。

+0

不幸的是,当我按照你的建议(在浏览器上)得到以下消息时,“本网站无法到达”和“本地主机拒绝连接”。和'ERR_CONNECTION_REFUSED'。在服务器上,我看到一个以服务器自身结束的请求流抛出错误'错误:套接字挂断' – Picci

+2

我不知道'http-server',但因为任何错误都被重定向到索引,我假设你有直到客户放弃为止。 我个人会像@rsp那样做,用快递写你自己的小型服务器,它也很容易和快速。 – DrakaSAN

+1

是的。访问'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.htmlindex.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 

活服务器还提供了热重装,但它不是你的要求

+0

无法正常工作。 HTTP服务器直接工作。 – mythicalcoder

+1

谢谢 - 这节省了我一些时间:) –