Express.js将几乎所有内容路由到一个请求



我想把所有不指向静态文件的请求映射到我的index.html,让javascript做路由。但是如果我使用下面的规则,我所有的请求(包括脚本和样式)击中*规则。

const express = require("express");
var app = express();
app.get("*", function (request, response) {
response.sendFile(path.join(__dirname, "/index.html"));
});
app.use("/scripts/*", express.static("scripts"));
app.use("/styles/*", express.static("styles"));
app.use("/views/*", express.static("views"));
var port = process.env.PORT || 3000;
app.listen(port, function () {
console.log("Server is running, port: " + port);
});

我也试过倒序。

为了澄清,这里有一些期望行为的例子:

  • /scripts/index.js=>/scripts/index.js
  • /views/app.html=>/views/app.html
  • /anything/here=>/index.html
  • /=>/index.html
  • /a/lot/of/stuff=>/index.html

我想把这个上传到heroku,我不想用那么多免费的学分。所以我想把所有的路由和东西都放在JS上,以节省服务器上的计算。

app.use('/scripts', express.static('scripts'));
app.use('/styles', express.static('styles'));
app.use('/views', express.static('views'));
app.get('/', function (request, response) {
response.sendFile(express.static(path.join(__dirname, 'index.html'));
});

尝试以这种方式使用代码,我真的希望这将为您工作

试试下面的代码。把你所有的文件放在public文件夹(包括index.html和其他文件夹,如script, styles, views)

const express = require('express')
const path = require('path')
const app = express()
const PORT = process.env.PORT || 3000
app.use(express.static(path.join(__dirname, '/public')))
app.get('*', (req, res) => {
res.redirect('/')
})
app.listen(PORT, () => console.log(`Server is running, port: ${PORT}`)

如果你将app.use functions移到你的代码顶部,你的代码将开始工作

相关内容

  • 没有找到相关文章

最新更新