首页 > 解决方案 > NodeJS Express Routing - 在同一个 NodeJS 应用程序上同时提供前端和后端服务

问题描述

我目前正试图围绕实现在同一个 NodeJS 应用程序上运行我的前端和后端的最佳方法。

我目前有两个 Express 路由器,一个用于前端,另一个用于后端。

下面是我的 UI/前端路线的摘录。在访问/我想重定向到 时/dashboard,我有一个中间件,用于检查您是否访问了仪表板但未经过身份验证,然后您将被重定向到该/login路线。

const routes = (app) => {
    const ui = Router();

    ui.use(function (req, res, next) {
        console.log(req.originalUrl)
        if (req.originalUrl === '/login' || req.originalUrl === '/register') {
            console.log('public route hit')
            return next();
        }

        if (req.isAuthenticated()) {
            console.log('user is authed')
            return next();
        }
        console.log('re-directing to login')
        return res.redirect('/login');
    });

    ui.get('/', (req, res) => {
        res.redirect('/dashboard'); //If root is navigated to go to dashboard
    });

    ui.get('/dashboard', async (req, res) => {
        res.render('static/dashboard.html', {
            locals: {
                ...globalLocals,
                pageName: 'Dashboard'
            },
            partials: {
                ...globalPartials
            }
        });
    });
    app.use('/', ui);
};

我的 API 路由的摘录是:

const routes = (app) => {
    const api = Router();

    api.get('/logout', async (req, res, next) => {
        await req.logout();
        return handleResponse(res, 200, 'success');
    });

    app.use('/api/v1/', api);
};

我遇到的主要问题是,通过让我的前端路由器路径使用/它,然后在对 的任何 API 调用上运行我的身份验证中间件/api/v1/***,这会导致任何登录尝试/api/v1/login导致重定向到/login.

我该如何解决这个问题?我应该让我的前端/UI 路由在它自己的路径上,比如/app/给我/app/dashboard吗?

标签: node.jsexpressfrontendbackendexpress-router

解决方案


推荐阅读