我正在尝试使用Express和/
进行路由工作。
我的目标是在网址为/login
时将用户发送到应用程序的主页,并在网址与server.js
匹配时将用户发送到登录页面。
在我的var mainRoutes = require("./routes/mainRoutes");
var apiRoutes = require("./routes/apiRoutes");
[...]
app.use("/", mainRoutes);
app.use("/api", apiRoutes);
我定义了两条路线:
apiRoutes
虽然mainRoutes
包含所有api路由定义,但var express = require("express");
var path = require("path");
let router = express.Router();
router.route("/").get((req, res, next) => {
res.sendFile("index.html", { root: "./client/build/" });
});
router.route("/login").get((req, res, next) => {
res.send("This is the login page");
});
module.exports = router;
负责主导航(至少这是主意):
// Priority serve any static files.
app.use(express.static(path.join(__dirname, "client/build")));
// All remaining requests return the React app, so it can handle routing.
app.get("*", function(req, res) {
res.sendFile(path.join(__dirname + "/client/build/index.html"));
});
在某处,我读到了有关提供create-react-app构建过程所产生的静态资产的信息,所以我补充说:
/login
添加这些行后,我成功查看了我的index.html但我无法访问/api
和mainRoutes
子路由,因为它每次都会在主页面(index.html)上重定向。< / p>
这就像我需要在我的子路由{{1}}上提供静态文件,但我不知道如何做到这一点。
我该如何做到这一点?
答案 0 :(得分:1)
app.get('*')
会匹配您拥有的每条路线。
你应该这样做:
var mainRoutes = require("./routes/mainRoutes");
var apiRoutes = require("./routes/apiRoutes");
[...]
app.use(express.static(path.join(__dirname, "client/build")));
app.use("/", mainRoutes);
app.use("/api", apiRoutes);
// If the app reaches this point, it means that
// the path did not match any of the ones above
app.use(function(req, res, next){
// redirect the user to where we serve the index.html
res.redirect('/');
});
答案 1 :(得分:0)
create-react-app我认为处理路由不同,你不能将浏览器的路由连接到你想要服务的路由,因为你正在运行单页应用程序&#34;,除非你做与服务器和js包的通用路由