首页 > 解决方案 > 发送 index.html 时从未触发主“/”路由控制器

问题描述

我试图了解我遇到的奇怪行为。我有一个node.js已安装的简单服务器express。服务器仅用于中继的目的,因为在前端它的react应用程序,所以我不使用服务器来发送特定的文件或类似的东西。最重要的是,我将它连接到cloudflare灵活模式以避免处理证书。服务器还安装socket.io了实时数据流。

我遇到的问题是在访问/主服务器路由时,永远不会触发该路由的快速控制器。因此,例如输入 url https://example.org,您会期望/控制器中的此路径 - 触发。出于某种原因,情况并非如此。

index.js

const path = require("path");
const express = require("express");
const app = express();
const http = require("http").Server(app);
const session = require("express-session");
const redis = require("redis");
let RedisStore = require("connect-redis")(session);
let redisClient = redis.createClient();
const io = require("socket.io")(http);
const bodyParser = require("body-parser");
const errorHandler = require("./lib/handlers/error");
const webRoute = require("./lib/routes/web");
const config = require("./config");
const socketService = require("./lib/services/socket");

let sessionMiddleware = session({
    store: new RedisStore({ client: redisClient, ttl: config.ttl }),
    secret: config.secret,
    saveUninitialized: true,
    resave: false,
    proxy: true,
    cookie: { secure: true },
});

app.set("trust proxy", 1);

io.use((socket, next) => {
    sessionMiddleware(socket.request, socket.request.res || {}, next);
});

app.use(sessionMiddleware);

app.use(express.static(path.join(__dirname, config.public)));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use("/", webRoute);

app.use(errorHandler);

http.listen(config.port, function () {
    console.log("Server listening on port " + config.port);
});

socketService(io);

web.js(网络路由)

const router = express.Router();
const config = require("../../config");

const web = (req, res, next) => {
    console.log("main route triggered", Date.now());
    res.sendFile(path.join(__dirname, config.index));
};

router.get("/*", web);

module.exports = router;

所以基本上无论输入什么样的路由/about/gallery它都会发送index.html文件,因为路由是由react应用程序管理的。现在我不明白的是,何时/about输入,console.log被触发,但/不是。即使我完全删除了控制器,输入域仍然有效并发送了 index.html 文件。

为什么会发生这种情况以及如何解决它,所以访问/主路由总是触发控制器?

标签: node.jsexpresssocket.ioroutescloudflare

解决方案


推荐阅读