我想把所有不指向静态文件的请求映射到我的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
移到你的代码顶部,你的代码将开始工作