Express 中的相同路径路由器切换

Same path Router switching in Express

我最近开始学习express,想在相同路径的外部路由器之间切换,例如(www.facebook.com),第一次访问它作为登录页面,但登录后会改变为主页。

第一部分

server.js中的事件代码(起点)

server.get('/',(req,res)=>{
    res.render('loginPageDemo');
    res.setHeader("Content-Type", "text/html")});

const guestRouter = require('./routers/guest');

server.post('/',(req,res,next)=>{  // Problem point
    if(req.body.guestBtn = "guestBtn"){
        // switch to guest router
    }
});

guest.js

中的所有代码
var express = require('express');
var guestRouter = express();

guestRouter.get('/', (req,res,next) => {
    res.send('you are guest');
});

module.exports = guestRouter;

第二部分

使用 ejs 的登录页面

<!DOCTYPE html>
<html>
    <head>
        <Title>login page</Title>
    </head>
    <body>
        <form action="/" method="POST">
            <input required type="email" name="email" placeholder="E-Mail">
            <input required type="password" name="pass" placeholder="Password">
            <button type="submit">Submit</button>
        </form>
        <form action="/" method="post">
            <button type="submit" name="guestBtn" value="guest">Continue as guest</button>
        </form>
    </body>
</html>

server.js:检查第 13 行和第 21 行中的 // 问题点

require('dotenv').config();

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const server = express();

server.use(express.static('public'));
server.use(bodyParser.urlencoded({extended: true}));

server.set('view engine', 'ejs');

server.get('/',(req,res)=>{ // PROBLEM POINT
    res.render('loginPageDemo');
    res.setHeader("Content-Type", "text/html")});

const adminRouter = require('./routers/admin');
const userRouter = require('./routers/user');
const guestRouter = require('./routers/guest');

server.post('/',(req,res,next)=>{  // PROBLEM POINT
    if(req.body.guestBtn = "guestBtn"){
    // switch to guest router
    //
    // res.redirect(guestRouter); // OUTPUT ==> Cannot GET /function(req,%20res,%20next)%20%7B%0A%20%20%20%20app.handle(req,%20res,%20next);%0A%20%20%7D
    // res.redirect(guestRouter(req, res, next)); // OUTPUT ==> Cannot GET /undefined
    // server.use(guestRouter); //NOT WORKING, stayed in LoginPageDemo.ejs.      
    }
});

// server.use(adminRouter);
// server.use(userRouter);
server.listen(process.env.PORT,(err)=>console.log(err ? err:"Server started in "+process.env.PORT+" PORT"));

guest.js

var express = require('express');
var guestRouter = express();

guestRouter.get('/', (req,res,next) => {
    res.send('you are guest');
});

module.exports = guestRouter;
server.post('/',(req,res,next)=>{  // PROBLEM POINT
    if(req.body.guestBtn = "guestBtn"){
    // switch to guest router
    //
    // res.redirect(guestRouter); // OUTPUT ==> Cannot GET /function(req,%20res,%20next)%20%7B%0A%20%20%20%20app.handle(req,%20res,%20next);%0A%20%20%7D
    // res.redirect(guestRouter(req, res, next)); // OUTPUT ==> Cannot GET /undefined
    // server.use(guestRouter); //NOT WORKING, stayed in LoginPageDemo.ejs.      
    }
});

res.redirect() 做错了。 res.redirect() 将路由作为参数,但您直接发送导入的对象。

server.post('/',(req,res,next)=>{  // PROBLEM POINT
        if(req.body.guestBtn = "guestBtn"){
         res.redirect("/guestRoute")
     }
})

并且在您的 guest.js 中您应该有正确的路线后缀 guest.js

var express = require('express');
var guestRouter = express();

guestRouter.get('/guestRoute', (req,res,next) => {
    res.send('you are guest');
});

module.exports = guestRouter;

如果您想使用具有正确路由后缀的路由文件,请像

一样使用它
server.use("/guest",guestrouter)

并在您的 guest.js 文件中

guestRouter.get('/route1', (req,res,next) => {
    res.send('you are guest');
});

guestRouter.get('/route2', (req,res,next) => {
    res.send('you are guest');
});

现在您的整个 uri 将是

<your-domain>/guest/route1. etc