Michael Joseph Aubry
Michael Joseph Aubry

Reputation: 13402

In express how do I redirect a user to an external url?

I have a payment system using node.js and braintree, when the payment is successful I want to send the user to the back end. My back end is setup elsewhere.

I have tried

res.writeHead(301,
  {Location: 'http://app.example.io'}
);
res.end();

So window.location is obviously not available. I cant think of any ways to redirect a user?

Upvotes: 97

Views: 173048

Answers (6)

Ramin Bateni
Ramin Bateni

Reputation: 17415

Nobody mentioned this different way of redirect as an answer here, so I write it:

  • To permanent redirect:

    res.redirect(301, 'http://app.example.io');
    
  • To temporary redirect:

    res.redirect(302, 'http://app.example.io');
    // OR
    res.redirect('http://app.example.io');
    

Upvotes: 1

user2056154
user2056154

Reputation: 93

None of these worked for me, so I tricked the receiving client with the following result:

res.status(200).send('<script>window.location.href="https://your external ref"</script>');

Some will say if noscript is on this does not work, but really which site does not use it.

Upvotes: -12

TheIronDeveloper
TheIronDeveloper

Reputation: 3624

You can do

res.redirect('https://app.example.io');

Express docs: https://expressjs.com/en/api.html#res.redirect

Upvotes: 215

Messivert
Messivert

Reputation: 123

    app.get("/where", (req, res) => {

    res.status(301).redirect("https://www.google.com")

})

You need to include the status (301)

Upvotes: 11

AIon
AIon

Reputation: 13071

The selected answer did not work for me. It was redirecting me to: locahost:8080/www.google.com - which is nonsense.

301 Moved Permanently needs to be included with res.status(301) as seen below.

app.get("/where", (req, res) => {

    res.status(301).redirect("https://www.google.com")

})

You are in the same situation since your back-end is elsewhere.

Upvotes: 28

Granit
Granit

Reputation: 314

I just have the same issue and got it work by adding "next". I use routers so maybe you have same issue as mine? Without next, i got error about no render engine...weird

var express = require('express');
var router = express.Router();
var debug = require('debug')('node_blog:server');

/* GET home page. */
router.get('/', function(req, res, next) {
  debug("index debug");
  res.render('index.html', { title: 'Express' });
});

router.post("/", function (req, res, next) {
    //var pass = req.body("password");
    //var loginx = req.body("login");
    //res.render('index.html', { title: 'Express' });
    res.redirect("/users")
    next
});

module.exports = router;

Upvotes: 2

Related Questions