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