Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点+;使用静态HTML表示。如何将所有请求路由到index.html?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 节点+;使用静态HTML表示。如何将所有请求路由到index.html?

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() {

我正在开发一个单页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() {
    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);