如何在 Express.js 中为路由的子路径呈现不同的视图

How can I render a different view for a subpath of a route in Express.js?

本文关键字:路径 视图 路由 Express js      更新时间:2023-09-26

我正在开发一个Node js + Express + express-handlebars应用程序。在我的应用程序.js文件中,我将路由定义为

var students = require('./routes/students');
var faculty = require('./routes/faculty');
app.use('/students', students);
app.use('/faculty', faculty);

学生.js教职员工.js存在于路由文件夹中的位置。因此,当用户转到包含/students 的路径时,我在 students.js 中执行以下操作:

var express = require('express');
var router = express.Router();
router.get('/', function(req, res){
    res.render('students_view', {
        msg : 'this is student page'
    });
});
module.exports = router;

其中students_view是视图文件夹中的快速车把页面。现在假设我想添加一个新学生,当我按下student_view页面上的"添加"按钮时,它会将我带到包含以下 url 的页面:/students/add

在该页面上,我需要呈现一个不同的视图(准确地说是表单)。在我的应用程序中.js我正在执行以下操作:

app.use('/student/add', students);

在我的学生中.js我正在做以下事情:

router.get('/add', function(req, res){
   res.render('students_add', {
        msg : 'this is student add page'
    });
 });

但是,它仍然转到较早的 router.get('/') 并呈现student_view页面。如何为此路径呈现不同的视图?它是否需要自己单独的路由(例如student_add.js)来处理获取和发布?

您正在使用app.js 中的路由。 将student.js更改为

router.get('/', function(req, res){
    res.render('students_view', {
        msg : 'this is student page'
    });
});
router.get('/add', function(req, res){
   res.render('students_add', {
        msg : 'this is student add page'
    });
 });

app.js

app.use('/students', students); 
// not need of app.use('/students/add', students); 

删除app.js中的app.use('/student/add', students);
只需在/routes/students.js中写下/students路线

app.use('/students', students);保存所有网址,如下所示: /students /students/foo /students/foo/bar ... 除非你在app.use('/students', students);之前写一条像app.use('/students/baz', anotherStudentsRoute);这样的路线。