Javascript 节点+;使用静态HTML表示。如何将所有请求路由到index.html?
我正在开发一个单页web应用程序,使用Node+Express和Handlebar进行模板制作。index.html目前运行良好,它由一个标准的server.js文件提供:Javascript 节点+;使用静态HTML表示。如何将所有请求路由到index.html?,javascript,node.js,express,Javascript,Node.js,Express,我正在开发一个单页web应用程序,使用Node+Express和Handlebar进行模板制作。index.html目前运行良好,它由一个标准的server.js文件提供: var express = require('express'); var server = express(); server.use(express.static(__dirname + '/public')); var port = 10001; server.listen(port, function() {
var express = require('express');
var server = express();
server.use(express.static(__dirname + '/public'));
var port = 10001;
server.listen(port, function() {
console.log('server listening on port ' + port);
});
从http://localhost:10001/
。我的问题是我在应用程序中使用推送状态,因此浏览器可能会显示类似http://localhost:10001/foo/bar
然后,如果我刷新页面,我会得到错误无法获取/foo/bar
,因为没有此路径
所以,我的问题是,请原谅我在节点方面令人难以置信的noobishness,我能让所有请求都路由到index.html吗?我的应用程序中的JavaScript可以根据页面加载时的URL参数处理显示正确内容的问题。我不想定义自定义路由,因为数量会很大,而且它们的路径可以动态更改。此模式将为静态资产提供服务,然后再使用为前端应用程序提供服务的全面路由。若要注册任何其他路由,只需将它们添加到catch all路由之上
var express = require('express');
var server = express();
server.use(express.static(__dirname + '/public'));
server.get('*', function(req, res){
res.sendFile('index.html');
});
var port = 10001;
server.listen(port, function() {
console.log('server listening on port ' + port);
});
var express = require('express');
var server = express();
// middleware
server.use(express.static(__dirname + '/public'));
// routes
server.use('*', function (req, res) {
// serve file
});
var port = 10001;
server.listen(port, function() {
console.log('server listening on port ' + port);
});
这个简短的东西效果很好:
import express from "express";
const app = express(),
staticServe = express.static(`${ __dirname }/public`);
app.use("/", staticServe);
app.use("*", staticServe);
现在只需确保HTML/JS文件中的所有URL都是绝对URL,因为所有不存在的资源都将返回index.HTML
文件
expressv4.15.2
这可以通过我所做的编辑工作,除了它还作用于我的CSS文件的URL,因此它提供index.html而不是CSS文件。是否有一种方法只能通过mime类型(即,仅在html上)应用此方法。@JPollock在您的“一网打尽”路由之前为公共文件注册中间件。这样,对css/js的请求将在索引路由之前被拾取。值得注意的是,正如其他答案中所指出的,catch-all路由应该在静态中间件和其他get路由之后。public在=>“server.use('/public',express.static(_-dirname+'/public'));”中的用法是什么。在以后的步骤中,当使用指定的路由名称为单个文件提供服务时,可以使用它来别名“\uu dirname+”/public”吗?嘿,我只是想指出,您正在导入static
,但从未实际使用过它,因为您使用了express.static
@kemicofa great catch!固定的!
var app = express();
var options = {
dotfiles: 'ignore',
etag: true,
extensions: ['htm', 'html'],
index: 'index.html',
lastModified: true,
maxAge: '1d',
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now());
res.header('Cache-Control', 'public, max-age=1d');
}
};
app.use(compression());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
app.use('/', express.static(__dirname + '/public', options));
app.use('*', express.static(__dirname + '/public', options));
import express from "express";
const app = express(),
staticServe = express.static(`${ __dirname }/public`);
app.use("/", staticServe);
app.use("*", staticServe);