NodeJS 使用index.html响应任何请求的节点http-server

bmvo0sr5  于 2022-12-12  发布在  Node.js
关注(0)|答案(7)|浏览(163)

我已在全局范围内安装了http-server
我从本地主机端口8080上的myDir启动它。在myDir中,我有index.html
如果我请求(从浏览器)http://localhost:8080/,我会得到index.html,这是可以的。
如果我通过http://localhost:8080/anything请求,我不会从服务器得到任何响应。
相反,我希望我的服务器总是用index.html响应任何到达端口8080上的localhost的http请求。
有这个可能。
先谢了

klsxnrf1

klsxnrf11#

按照文档中的规定使用。

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

请注意代理URL末尾的?

slwdgvem

slwdgvem2#

为了达到您的要求,我建议您使用live-server而不是http-server。

live-server --port=8080 --entry-file=./index.html

live-server也提供了一个热重新加载,但这不是你的要求之一
编辑:live-server不是设计用于生产的,例如没有gzip压缩
编辑2:http-server的维护者在这篇评论中明确表示,http-server永远不会考虑SPA用例
编辑3:serve似乎也是一个不错的选择

ccrfmcuu

ccrfmcuu3#

使用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一样简单,后者没有这个选项。

xggvc2p6

xggvc2p64#

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

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

请注意,any 错误(包括404)将重定向到您的索引,而不仅仅是缺少路径。

7tofc5zh

7tofc5zh5#

有时候,对于像这样的特定情况,编写自己的服务器很容易:

'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

这比使用现成的解决方案要复杂得多(虽然,正如您所看到的,也没有那么复杂),但是您可以更灵活地选择它的行为方式。

q3qa4bjr

q3qa4bjr6#

有点战后,但无论如何.对于有Angular 的应用程序,我建议添加到您的包.json:

"serve-prod": "cp dist/app-name/index.html dist/app-name/404.html && http-server dist/app-name"

那就叫

npm run serve-prod
mmvthczy

mmvthczy7#

我在尝试为生产构建一个苗条的应用程序时遇到了这个问题。我没有使用http-server,而是使用sirv
先安装它npm i --save-dev sirv-cli
然后在package.json上添加以下脚本:"start": "sirv public --single",
快乐编码!

相关问题