【发布时间】: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