Nodejs express在render和redirect的时候可以指定路径吗?

Nodejs express在render和redirect的时候可以指定路径吗?

比方我想渲染模板 aaa.ejs 至 http://域名/admin/aaa,看官方手册貌似没有路径可选,一旦render了aaa.ejs就被指向了http://域名/aaa,如果再想跳转到admin/aaa下面,可惜redirect 带不上参数。苦恼中。。。。


6 回复

当然可以!在 Node.js 中使用 Express 框架时,你可以通过指定路径来调用 renderredirect 方法。下面是关于如何实现这一点的详细说明及示例代码。

render 方法

render 方法用于渲染视图并返回 HTML 字符串。你可以在调用 render 方法时指定视图的路径。

示例代码:

const express = require('express');
const app = express();

app.set('views', './views'); // 设置视图文件夹路径
app.set('view engine', 'ejs'); // 设置模板引擎为 EJS

// 渲染视图 /views/admin/aaa.ejs 并返回给客户端
app.get('/admin/aaa', (req, res) => {
    res.render('admin/aaa', { title: 'Admin Page' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

redirect 方法

redirect 方法用于将客户端重定向到另一个 URL。你可以直接在重定向方法中指定路径。

示例代码:

const express = require('express');
const app = express();

app.use((req, res, next) => {
    // 如果请求的是 /aaa,则重定向到 /admin/aaa
    if (req.path === '/aaa') {
        return res.redirect('/admin/aaa');
    }
    next();
});

// 渲染视图 /views/admin/aaa.ejs 并返回给客户端
app.get('/admin/aaa', (req, res) => {
    res.render('admin/aaa', { title: 'Admin Page' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 设置视图引擎:首先需要设置视图文件夹路径和模板引擎(这里使用 EJS)。
  2. 渲染视图:在路由处理函数中,使用 res.render 方法渲染指定路径下的视图文件,并传递数据(如 title)。
  3. 重定向:在中间件或路由处理函数中,使用 res.redirect 方法将客户端重定向到指定路径。

以上就是如何在 Express 中通过指定路径来调用 renderredirect 方法的方法。希望这对你有所帮助!


当然可以。给你个栗子。 controller.js

exports.index = function(req,res) {
	res.render('aaa',{});
}

route.js

module.exports = function(app) {
 var controller = require('contoller');
 app.route('/admin/aaa').get(controller.index);
}

server.js

var app = express();
require('route')(app);

大神我试了你的例子,你这个是外部请求就是从/admin/add进来。 因为我这边比方说,请求从/admin/bbb进来,渲染aaa的模板,但是最终浏览器那边跳到了/admin/aaa下面,而且是在不带SESSION的情况下

明白你的意思了。我觉得不需要再/admin/bbb的时候渲染模板。要是数据量不大的话,把渲染模板所需的数据放在cookie中,然后在/admin/aaa中拿到这个cookie数据。 route.js

module.exports = function(app) {
 var controller = require('contoller');
 app.route('/admin/bbb').get(function(req,res){
    res.cookie('aaacookie',{cookieobj},{path:'/admin/aaa'})
 	res.redirect('/admin/aaa');
 });
 //在controller.index中通过req.cookie.aaacookie拿到数据
 app.route('/admin/aaa').get(controller.index);
}

多谢,好像也只有这样了。嘛就麻烦在如果不依赖SESSION,每次渲染到根路径下,NGINX的规则要写死人了。。。。

在使用 Express 进行开发时,res.render()res.redirect() 方法确实允许你指定路径。下面我会分别解释这两个方法如何使用以及示例代码。

使用 res.render()

res.render() 用于渲染模板并返回渲染后的 HTML 字符串给客户端。你可以指定模板文件的路径,并且可以在该方法中传递数据以供模板引擎使用。

示例代码:

const express = require('express');
const app = express();

app.set('views', './views'); // 设置视图文件夹路径
app.set('view engine', 'ejs'); // 设置模板引擎为 EJS

app.get('/aaa', (req, res) => {
    res.render('aaa', { message: 'Hello, World!' });
});

app.listen(3000);

在这个例子中,当访问 /aaa 路径时,会渲染 views/aaa.ejs 模板,并将 { message: 'Hello, World!' } 传递给模板。

使用 res.redirect()

res.redirect() 用于将请求重定向到另一个 URL。你可以直接传入一个相对路径或绝对路径。

示例代码:

const express = require('express');
const app = express();

app.get('/old-path', (req, res) => {
    res.redirect('/admin/aaa'); // 重定向到 /admin/aaa
});

app.get('/admin/aaa', (req, res) => {
    res.send('You have been redirected to the admin page.');
});

app.listen(3000);

在这个例子中,当访问 /old-path 路径时,服务器会立即响应一个 302 重定向到 /admin/aaa,然后用户会被重定向到 /admin/aaa 页面,该页面会显示 “You have been redirected to the admin page.”。

总结来说,res.render() 用于渲染模板并返回结果,而 res.redirect() 用于将请求重定向到另一个路径。两者都可以指定具体的路径。

回到顶部