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

时间:2016-03-18 10:33:44

标签: javascript node.js express

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

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

app.use('/students', students);
app.use('/faculty', faculty);

路径文件夹中存在 students.js faculty.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是views文件夹中的快递手柄页面。现在假设我要添加一名新学生,当我按下 student_view 页面上的添加按钮时,我会转到带有此网址的页面:/ students / add

在该页面上,我需要呈现不同的视图(确切地说是一种形式)。在我的app.js中,我正在执行以下操作:

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

在我的student.js中,我正在做以下事情:

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

但是,它仍然转到较早的router.get('/')并呈现student_view页面。如何为此路径呈现不同的视图?它是否需要自己独立的路线(比如student_add.js),我可以在哪里处理获取和发布?

2 个答案:

答案 0 :(得分:2)

您正在使用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); 

答案 1 :(得分:0)

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

中写下/routes/students.js路线即可

app.use('/students', students);按住以下所有网址: /students /students/foo /students/foo/bar ... 除非您在app.use('/students/baz', anotherStudentsRoute);之前写出app.use('/students', students);之类的路线。