IT,프로그래밍/Node.js
[Node.js] Redirect 를 data 와 함께 보내는법
JUST_MJ
2020. 1. 22. 23:59
Node 서버 내에서 redirect를 data와 함께 보내줘야 하는 일이 있었다.
방법이야? data=1234와 같이 url에 querystring으로 던져주면 되는 일이지만 원시적인 방법으로 하고 싶지 않아서
[ node redirect with data ]라는 키워드로 구글링을 하여서 아래의 스택오버플로(친구!)에서 필요한 정보를 얻을 수 있었다.
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 값이 있는지를 체크해주고 필요에 따라 없애 줘야 한다는 거다.