【问题标题】:Same path Router switching in ExpressExpress中的相同路径路由器切换
【发布时间】:2021-09-12 13:11:43
【问题描述】:

我最近开始学习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;

【问题讨论】:

  • 您需要授权用户并检查他是否已经在您的/ 路由中登录。如果不根据此逻辑重定向到登录页面或主页。要重定向,您可以使用res.redirect("/home")
  • @subrahmanyabhat 我想在控制相同路径(链接)的路由器之间切换。之所以解决这个问题,是因为 server.get('/', callBackFunction()) 控制了 loaclhost:port/ 并且不让 guestRouter.get('/', callBackFunction()) 控制并更改页面内容,我想要关闭 server.get() 并打开 server.use(guestRouter)。感谢您的回答
  • 如果你的问题被答案解决了,接受答案帮助别人得到解决方案
  • @subrahmanya bhat,不幸的是,它没有达到我想要的效果,而且我不能为你的答案投票,因为我的声誉低于 15。如果我得到答案,我会在这里发布。

标签: javascript node.js express routes


【解决方案1】:
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 中你应该有正确的路由后缀 来宾.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

【讨论】:

  • 感谢您的回答@subrahmanyabhat,但我想在控制相同路径(链接)的路由器之间切换。之所以解决这个问题,是因为 server.get('/', callBackFunction()) 控制了 loaclhost:port/ 并且不让 guestRouter.get('/', callBackFunction()) 控制并更改页面内容,我想要关闭 server.get() 并打开 server.use(guestRouter)。 **我想这样做,如果以访客身份继续或通过用户帐户或管理员帐户登录将它们重定向到相同的路径,但通过使用不同的路由器提供不同的内容。 (我这样做是练习而不是项目)**
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2018-10-10
  • 1970-01-01
  • 2020-08-30
  • 2022-01-04
相关资源
最近更新 更多