我有一个节点应用程序,可以像这样为我的react应用程序提供服务:
// STATIC ASSETS WHEN PUSHED TO HEROKU
if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
}
app.get("*", function(req, res) {
res.sendFile(path.join(__dirname, "./client/public/index.html"));
});
通常这应该是您放置的最后一条路由,因为它会覆盖所有其他的get路由。但是,我有一些用于验证身份验证的中间件:
const jwt = require("express-jwt")
const auth = jwt({
secret: process.env.JWT_SECRET,
userProperty: 'payload'
});
app.use("/auth", authRoutes);
app.use(auth);
app.use("/api", routes);
/auth
路由用于登录和注册,因此不受中间件保护,而/api
路由受中间件保护。
但是,当我尝试使用该应用程序时,它无法正确地从API请求(例如GET /api/users
)发送回数据,而是返回*路由中指定的HTML。
我是否可以通过身份验证的路由,仍然可以正确地为我的react应用服务?
答案 0 :(得分:0)
您可以将HTML路由放在底部,并且仅使API路由使用auth
中间件。这将不会为您的静态页面执行身份验证中间件,并且只会授权/api
路由。
const jwt = require("express-jwt")
const auth = jwt({
secret: process.env.JWT_SECRET,
userProperty: 'payload'
});
app.use("/auth", authRoutes);
app.get("/api", auth, routes);
// STATIC ASSETS WHEN PUSHED TO HEROKU
if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
}
app.get("*", function(req, res) {
res.sendFile(path.join(__dirname, "./client/public/index.html"));
});