You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Express JS中跨文件夹加载.js文件并替换登录后渲染页面?

解决方案:登录后跳转至frontpage的server.js对应页面并复用该文件

看起来你已经有了能正常运行的登录系统,现在需要把登录后的主页面换成frontpage文件夹里server.js对应的页面,同时复用这个文件的逻辑。下面是具体的实现步骤:

1. 调整frontpage/server.js的结构(关键!)

如果你的server.js现在是直接调用app.listen()启动服务的,它没法被其他文件复用。我们需要把它改成导出Express实例,而非直接启动服务:

// frontpage/server.js
const express = require('express');
const app = express();

// 保留你原来server.js里的所有路由、中间件逻辑,比如:
app.get('/', (req, res) => {
  // 渲染frontpage对应的页面,比如你原本的frontpage模板
  res.render('frontpage_main'); // 假设你有对应EJS模板,可放在主views或frontpage专属views里
});

// 移除原来的 app.listen(xxx) 代码,替换为导出app实例
module.exports = app;

2. 在主应用中挂载frontpage子应用

找到你的主Express入口文件(比如根目录的app.js),把frontpage的Express实例作为子应用挂载,让它的路由被主应用接管:

// 主应用入口文件(如app.js)
const express = require('express');
const path = require('path');
const app = express();

// 挂载frontpage子应用,指定访问路径为/frontpage(可自定义路径)
const frontpageApp = require('./frontpage/server.js');
app.use('/frontpage', frontpageApp);

// 保留原有的login_register路由挂载
const loginRoutes = require('./login_register/routes/index');
const userRoutes = require('./login_register/routes/users');
app.use('/', loginRoutes);
app.use('/users', userRoutes);

// 其他中间件、passport配置等保持不变
// ...

app.listen(3000, () => console.log('Server running'));

3. 修改登录成功后的跳转路径

打开login_register/routes/users.js,把successRedirect的目标改成我们刚才挂载的frontpage路径:

// login_register/routes/users.js
router.post('/login', (req, res, next) => {
  // 把原来的/movie_main_page替换为/frontpage(或你自定义的挂载路径)
  passport.authenticate('local', { successRedirect: '/frontpage' })(req, res, next);
});

module.exports = router;

4. 调整视图路径(按需处理)

如果frontpage有自己的EJS模板文件夹(比如frontpage/views),需要告诉主应用去哪里找这些模板:

// 主应用入口文件(app.js)
app.set('views', [
  path.join(__dirname, 'views'), // 原来的主views目录
  path.join(__dirname, 'frontpage/views') // 新增frontpage的views目录
]);

这样主应用就能识别到frontpage里的模板文件了。

5. 清理旧代码(可选)

既然不再需要movie_main_page.ejs,可以删掉login_register/routes/index.js里对应的冗余路由:

// login_register/routes/index.js
const express = require('express');
const router = express.Router();

// 保留登录注册的欢迎页路由
router.get('/', (req, res) => res.render('welcome'));

// 删除这一行:router.get('/movie_main_page', (req, res) => res.render('movie_main_page'));

module.exports = router;

这样修改后,用户登录成功就会跳转到/frontpage路径,也就是frontpage/server.js对应的页面,同时我们也成功复用了该文件的业务逻辑。

内容的提问来源于stack exchange,提问作者icantprogram

火山引擎 最新活动