내 응용 프로그램에서 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']