Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express.js: Is it possible to pass an object to a redirect like it is with res.render?

EDIT: The solutions proposed in this answer are the right way to achieve this:

On a get request in node I can do this:

app.get('/', function(req, res) {
    res.render('index.ejs', {
        message: 'test'
    });
});

And send an object in order to set a message along with the request. How can I do the same with a redirect:

i.e. something like this:

function testSend(req, res) {

    mess = {message: 'test two'};
    res.redirect('/', mess);
    //Won't pass to the "get"
}
like image 437
Startec Avatar asked Sep 17 '25 00:09

Startec


2 Answers

Another solution would be using express sessions:

When you initialize your app:

var session = require('express-session');
app.use(session({secret: 'mySecret', resave: false, saveUninitialized: false}));
//configure the options however you need them, obviously

Your redirect function:

function testSend(req, res) {
    req.session.message = 'please login first'; //or whatever
    res.redirect('/');
});

And in your router:

app.get('/', function(req, res) {
    var message = req.session.message;
    res.render('index.ejs', {message: message});
});

This keeps your message securely on the server side, in case it contains sensitive data.

like image 143
Jeremy D Avatar answered Sep 19 '25 15:09

Jeremy D


You can use session like @Jeremy, or pass data like params on URL

res.redirect('/my-url/?param1=value1&param2=value2')

on controller

req.query.param1
req.query.param2
like image 35
DJeanCar Avatar answered Sep 19 '25 14:09

DJeanCar