IT,프로그래밍/Node.js

[Node.js] Redirect 를 data 와 함께 보내는법

Node 서버 내에서 redirect를 data와 함께 보내줘야 하는 일이 있었다.

 

방법이야? data=1234와 같이 url에 querystring으로 던져주면 되는 일이지만 원시적인 방법으로 하고 싶지 않아서

 

[ node redirect with data ]라는 키워드로 구글링을 하여서 아래의 스택오버플로(친구!)에서 필요한 정보를 얻을 수 있었다.

 

 

https://stackoverflow.com/questions/19035373/how-do-i-redirect-in-expressjs-while-passing-some-context

 

How do I redirect in expressjs while passing some context?

I am using express to make a web app in node.js. This is a simplification of what I have: var express = require('express'); var jade = require('jade'); var http = require("http"); var app = expre...

stackoverflow.com

첫 번째 방법

 

필자가 싫어하는 원시적인 방법이었다.

 

app.get('/category', function(req, res) {
  var string = encodeURIComponent('something that would break');
  res.redirect('/?valid=' + string);
});

정말 단순히  뒤에 string을 붙여준 것뿐이다.

 

두 번째 방법

 

const url = require('url');    
app.get('/category', function(req, res) {
    res.redirect(url.format({
       pathname:"/",
       query: {
          "a": 1,
          "b": 2,
          "valid":"your string here"
        }
     }));
 });
//So if you want to redirect all req query string variables you can simply do

res.redirect(url.format({
       pathname:"/",
       query:req.query,
     });
 });
//And if you are using Node >= 7.x you can also use the querystring core module

const querystring = require('querystring');    
app.get('/category', function(req, res) {
      const query = querystring.stringify({
          "a": 1,
          "b": 2,
          "valid":"your string here"
      });
      res.redirect('/?' + query);
 });

위와 같이 url을 reqiure 해서 query object에 필요한 데이터를 같이 보내거나 node 7 버전 이상일 때에

쿼리 스트링을 stringify(object type을 string 타입으로 변경) 해서 붙여주는 방법이었다.

 

둘 다 첫 번째보다는 나았으나 가급적 노출이 안 됐으면 하는 결벽(?) 증 때문에 마지막 방법을 택했다.

 

마지막 방법

 

app.get('/category', function(req, res) {
  req.session.valid = true;
  res.redirect('/');
});

//And later on after the redirect...

app.get('/', function(req, res) {
  var passedVariable = req.session.valid;
  req.session.valid = null; // resets session variable
  // Do something
});

 

마지막 방법은 session을 사용하는 방법이었다.

 

이 방법은 외부로 노출도 안되면서 전달 데이터가 늘어났을 때도 확장성이 좋을 것 같아서 이 방법을 택했다.

주의할 점은 redirect 고된 라우터에서 session 값이 있는지를 체크해주고 필요에 따라 없애 줘야 한다는 거다.