반응형
node.js에서 다른 라우터로 데이터를 전달하는 방법
// 1. query build
// 1-1
const string = encodeURIComponent('something that would break');
res.redirect(`/login?valid=${string}`);
// 1-2
// const loginURI = new URL("http://localhost:5000/login");
let loginURI = new URL(window.location);
loginURI.searchParams.append("foo", 1);
loginURI.searchParams.append("bar", 2);
loginURI.searchParams.append("baz", "your string is here");
res.redirect(loginURI.href);
// 1-3 deprecated
url.format()
res.redirect(url.format({
pathname: "/login",
query: {
foo: 1,
bar: 2,
baz: "your string is here"
} // ?foo=1&bar=2&baz=your%string%is%here
}));
// 받는 쪽 라우터에서는
app.get("/login", (req,res)=>{
const {foo,bar,baz} = req.query;
})
// 2. session variable
// session 변수를 쓰려면 세션 미들웨어 세팅을 해야 한다.
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: false } // secure: true면 새로운 요청이 갈 때마다, session변수는 초기화 된다. 즉 값을 얻어올 수가 없다.
}));
app.get("/", (req,res)=>{
req.session.variables = 1;
res.redirect("/login")
})
app.get("/login", (req,res)=>{
res.send(req.session.variables) // 1
})
// 3. next()
// next() 함수로, 데이터를 전달할 수도 있긴 한데, 이건 아주 특수한 케이스에만 사용 될 수 있는 경우 같다.
// next()할수로 homeCtrl 로 이동해도 url은 여전히 그대로다.
// 즉 /home 경로로 들어가도 /category경로로 들어가도 homeCtrl은 실행이 된다.
function homeCtrl(req, res) {
var context = req.dataProcessed;
res.send(context);
}
function categoryCtrl(req, res, next) {
req.dataProcessed = "dataNotProcessed";
return next();
};
app.get('/home', homeCtrl);
app.get('/category', categoryCtrl, homeCtrl);
반응형
'서버 개발 > node' 카테고리의 다른 글
[nodejs] sequelize, 커스텀 외래키, 다대다 관계 설정 (0) | 2021.08.12 |
---|---|
typescript, node.js ,express 서버사이드 환경설정[2020.12.06] (0) | 2020.12.06 |