Node.js 如何使用express framework在节点js中设置cookie?

Node.js 如何使用express framework在节点js中设置cookie?,node.js,cookies,express,Node.js,Cookies,Express,在我的应用程序中,我需要使用express framework设置cookie 有人能帮我做这件事吗 var express = require('express'), http = require('http'); var app = express(); app.configure(function(){ app.use(express.cookieParser()); app.use(express.static(__dirname + '/public'));

在我的应用程序中,我需要使用express framework设置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);

在Express中使用中间件的顺序很重要:前面声明的中间件将首先被调用,如果它能够处理请求,那么后面声明的任何中间件都不会被调用

如果
express.static
正在处理请求,则需要向上移动中间件:

//我们需要cookieParser中间件才能处理Cookie
use(express.cookieParser());
//放一块饼干
应用程序使用(功能(请求、恢复、下一步){
//检查客户端是否发送了cookie
var cookie=req.cookies.cookieName;
如果(cookie==未定义){
//否:设置一个新的cookie
var randomNumber=Math.random().toString();
随机数=随机数。子字符串(2,随机数。长度);
res.cookie('cookieName',randomNumber,{maxAge:900000,httpOnly:true});
log('cookie创建成功');
}否则{
//是的,饼干已经出现了
log('cookie存在',cookie);
} 
next();//
设置Cookie?

读取Cookie?

演示

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('')

})

并不是完全回答你的问题,但我在寻找一个问题的答案时遇到了你的问题。也许它会帮助其他人

我的问题是Cookie是在服务器响应中设置的,但不是由浏览器保存的

服务器响应返回时设置了cookies:

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 
我就是这样解决的

我在客户端代码中使用了
fetch
。如果您没有在
fetch
选项中指定
凭据:“include'
,则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'
    })
})

我希望这对某人有帮助。

设置一个cookie:

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


阅读cookie:
(使用中间件)


在express中设置cookie很容易

  • 首先安装cookie解析器
  • 使用中间件
  • 设置cookie
  • 访问那个cookie

  • 完成!

    您如何验证cookie是否未设置?您是否检查了浏览器收到的响应标题?@NilsH我添加了日志语句。如果设置意味着它将显示为“cookie已成功创建”…确定,则您的中间件未被调用,或者之前的一些语句出现异常。如果我删除了“app.u”se(express.static(uu dirname+'/public'))“这行表示它设置了cookie。我还有一个问题,在设置cookie之前,我如何检查cookie是否存在?我编辑了我的答案,向您展示了如何检查cookie是否已设置。您的页面上可能有一些JS和/或CSS文件。这些文件将由
    express.static
    处理它们在中间件之后。因此,对于每个JS或CSS文件,都会调用代码。它没有设置cookie 8次,而是说cookie已经存在。这是意料之中的。请注意,cookie解析器现在应该单独安装。请参阅,我已在浏览器中检查了我的post请求,但此字段与post请求不符?如果使用XHR或J查询,使用'withCredentials:true'代替。嗨,你能说什么是signed:true吗?如果你建议将cookie设置为sign,那么重要的是要注意req.cookie将返回空。你只能从req.signedCookies检索签名cookie。你还需要添加以下内容:
    const app=express()app.use(cookieParser())
    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')
    
    req.cookies['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)