본문 바로가기
서버 개발/node

[nodejs] 노드js에서 data를 다른 라우터에게 전달해줄 수 있는 방법

by JIMYEONG 2021. 6. 24.
반응형

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);

반응형