我在全球范围内安装了http-server
。
我从localhost端口8080上的 myDir 启动它。在 myDir 中,我有index.html
。
如果我(从浏览器)请求http://localhost:8080/
我得到index.html,这没关系。
如果我请求http://localhost:8080/anything
我没有收到服务器的任何回复。
相反,我想要的是我的服务器总是使用index.html响应任何到达端口8080上的localhost的http请求。
这可能。
提前致谢
答案 0 :(得分:5)
使用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
一样简单。
答案 1 :(得分:5)
要实现您的要求,我建议您live-server而不是http-server。
live-server --port=8080 --entry-file=./index.html
live-server也提供热重载,但这不是你的要求之一
编辑:live-server并非设计用于生产。例如没有gzip压缩
编辑2:http-server的维护者清楚地说in this comment从来没有,http-server会考虑SPA用例
编辑3:serve似乎也是一个不错的选择
答案 2 :(得分:3)
是的,有href
/ -P
选项:
--proxy
请注意,包含404的任何错误将重定向到您的索引,而不仅仅是缺少路径。
答案 3 :(得分:3)
有时对于像这样的特定情况,编写自己的服务器很容易:
'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
)。
您可能需要制定一些例外情况,使用Express并不难:
'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
,安装Express:
npm install express
并以:
开头node app.js
比使用现成的解决方案更复杂(但是,正如您所看到的那样,也不是那么复杂)但是您可以更灵活地确定它的行为方式。添加日志记录等也很容易。
答案 4 :(得分:3)
按照文档中的说明使用。
http-server --port 8080 -P http://localhost:8080?
请注意代理URL末尾的?
。
答案 5 :(得分:0)
战争结束后有一点,但无论如何。 对于有角度的应用程序,我建议添加到您的package.json中:
"serve-prod": "cp dist/app-name/index.html dist/app-name/404.html && http-server dist/app-name"
然后拨打电话
npm run serve-prod