[node.js] Express 프레임 워크를 사용하여 노드 js에서 쿠키를 설정하는 방법은 무엇입니까?

내 응용 프로그램에서 Express 프레임 워크를 사용하여 쿠키를 설정해야합니다. 다음 코드를 시도했지만 쿠키를 설정하지 않았습니다.

누구든지 이것을 도와 줄 수 있습니까?

var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
      app.use(express.cookieParser());
      app.use(express.static(__dirname + '/public'));

      app.use(function (req, res) {
           var randomNumber=Math.random().toString();
           randomNumber=randomNumber.substring(2,randomNumber.length);
           res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })

           console.log('cookie have created successfully');
      });

});

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);



답변

Express에서 미들웨어를 사용하는 순서는 중요합니다. 앞서 선언 한 미들웨어가 먼저 호출되고 요청을 처리 할 수있는 경우 나중에 선언 된 미들웨어가 호출되지 않습니다.

express.static요청을 처리하는 경우 미들웨어를 위로 이동해야합니다.

// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());

// set a cookie
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.cookieName;
  if (cookie === undefined) {
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
    console.log('cookie created successfully');
  } else {
    // yes, cookie was already present 
    console.log('cookie exists', cookie);
  } 
  next(); // <-- important!
});

// let static middleware do its job
app.use(express.static(__dirname + '/public'));

또한 미들웨어 는 요청을 종료 하거나 (응답을 다시 보내어) 요청을 다음 미들웨어로 전달해야합니다. 이 경우 next()쿠키가 설정되면 호출하여 후자를 수행했습니다 .

최신 정보

현재 쿠키 파서는 별도의 npm 패키지이므로 사용하는 대신

app.use(express.cookieParser());

npm i cookie-parser다음을 사용 하여 별도로 설치 한 후 다음과 같이 사용해야합니다.

const cookieParser = require('cookie-parser');
app.use(cookieParser());


답변

쿠키를 설정 하시겠습니까?

res.cookie('cookieName', 'cookieValue')

쿠키를 읽으시겠습니까?

req.cookies

데모

const express('express')
    , cookieParser = require('cookie-parser'); // in order to read cookie sent from client

app.get('/', (req,res)=>{

    // read cookies
    console.log(req.cookies) 

    let options = {
        maxAge: 1000 * 60 * 15, // would expire after 15 minutes
        httpOnly: true, // The cookie only accessible by the web server
        signed: true // Indicates if the cookie should be signed
    }

    // Set cookie
    res.cookie('cookieName', 'cookieValue', options) // options is optional
    res.send('')

})


답변

귀하의 질문에 정확하게 대답하는 것이 아니라 귀하의 질문에 부딪히면서 제가 가진 문제에 대한 답변을 찾았습니다. 어쩌면 다른 사람을 도울 것입니다.

내 문제는 쿠키가 서버 응답으로 설정되었지만 브라우저에 의해 저장되지 않았다는 것입니다.

서버 응답에 쿠키가 설정되었습니다.

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 

이것이 내가 해결 한 방법입니다.

fetch클라이언트 측 코드에서 사용 했습니다. 당신은 지정하지 않으면 credentials: 'include' 에서 fetch옵션, 쿠키는 어느 쪽도 서버로 전송되지 않고 저장 브라우저에 의해, 심지어는 서버 응답 세트 쿠키 생각된다.

예:

var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');

return fetch('/your/server_endpoint', {
    method: 'POST',
    mode: 'same-origin',
    redirect: 'follow',
    credentials: 'include', // Don't forget to specify this if you need cookies
    headers: headers,
    body: JSON.stringify({
        first_name: 'John',
        last_name: 'Doe'
    })
})

나는 이것이 누군가를 돕기를 바랍니다.


답변

쿠키를 설정하십시오.

res.cookie('cookie', 'monster')

https://expressjs.com/en/4x/api.html#res.cookie

쿠키 읽기 :

( 쿠키 파서 미들웨어 사용)

req.cookies['cookie']

https://expressjs.com/en/4x/api.html#req.cookies


답변