在我的应用程序中,我需要使用快速框架设置一个cookie。我尝试了以下代码,但它没有设置cookie。
任何人都可以帮我这样做吗?
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);
答案 0 :(得分:168)
在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'));
此外,中间件需要 结束请求(通过发回响应),或将请求传递给下一个中间件。在这种情况下,我已经通过在设置cookie时调用next()
来完成后者。
答案 1 :(得分:77)
设置Cookie?
res.cookie('cookieName', 'cookieValue')
阅读Cookie?
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('')
})
答案 2 :(得分:22)
不完全回答您的问题,但我发现您的问题正在寻找我的问题的答案。所以我在这里发布,也许它会帮助某人。
我的问题是,Cookie是在服务器响应中设置的,但未被浏览器保存。服务器响应返回时设置了cookie:
Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT
但是cookie从未被浏览器保存过。
这就是我解决它的方法。
我在客户端代码中使用fetch
。如果您未在credentials: 'include'
选项中指定fetch
,则虽然服务器响应设置了Cookie,但Cookie既不会发送到服务器也不会被浏览器保存。
示例:
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'
})
})
希望它对某人有帮助。
答案 3 :(得分:13)
设置Cookie:
res.cookie('cookie', 'monster')
https://expressjs.com/en/4x/api.html#res.cookie
阅读Cookie
(使用cookie-parser中间件)
req.cookies['cookie']
答案 4 :(得分:6)
在 express 中设置 cookie 很容易
npm install cookie-parser
const cookieParser = require('cookie-parser');
app.use(cookieParser());
res.cookie('cookieName', '1', { expires: new Date(Date.now() + 900000), httpOnly: true })
console.dir(req.cookies.cookieName)
完成!
答案 5 :(得分:-1)
您可以使用 JavaScript Cookie 软件包
安装:
npm install cookie
之后:
<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>
第二组Cookie:
Cookies.set('name', 'value')
中的文档