Node 서버 내에서 redirect를 data와 함께 보내줘야 하는 일이 있었다.
방법이야? data=1234와 같이 url에 querystring으로 던져주면 되는 일이지만 원시적인 방법으로 하고 싶지 않아서
[ node redirect with data ]라는 키워드로 구글링을 하여서 아래의 스택오버플로(친구!)에서 필요한 정보를 얻을 수 있었다.
첫 번째 방법
필자가 싫어하는 원시적인 방법이었다.
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 값이 있는지를 체크해주고 필요에 따라 없애 줘야 한다는 거다.
'IT,프로그래밍 > Node.js' 카테고리의 다른 글
[better code] if else, case 안쓰고 분기하는법 (0) | 2020.08.07 |
---|---|
express-validator 에서 array 내부 object 검증 하는법 (0) | 2020.05.25 |
[Node, express, ejs] i18next 써서 국제화 하기 [2] (5) | 2019.08.16 |
[Node, express, ejs] i18next 써서 국제화 하기 [1] (1) | 2019.08.16 |
[Node.js , express, ejs] express + EJS render 할때 json 으로 변수넣기 (0) | 2019.08.05 |