当前位置: 首页 > 面试题库 >

如何使用Express框架在Node JS中设置cookie?

包永新
2023-03-14
问题内容

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

问题答案:

在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()在设置cookie时调用来完成后者。

更新资料

到目前为止,cookie解析器是一个单独的npm包,因此不要使用

app.use(express.cookieParser());

您需要使用单独安装它npm i cookie-parser,然后将其用作:

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


 类似资料:
  • 问题内容: 我正在使用Nodejs和Express Js。另外,我将NowJS添加到Express Js中以进行一些实时处理。 在配置文件中,我有 然后使用以下命令运行该应用程序: 但是,文件(图像,css,js)似乎没有被缓存,它们总是作为新文件提供。 P / s:我刚刚在localhost上进行了测试,缓存似乎可以在localhost上运行,但是,当上传到服务器时,缓存不再起作用。 问题答案:

  • 我一直面临Chrome浏览器超时的问题,日志如下:, [1538530975.003][严重]:从渲染器接收消息时超时:57.998[1538530975.008][严重]:从渲染器接收消息时超时:-0.005 通过一些研究发现了解决方案(参考:https://www.skptricks.com/2018/08/timed-out-receiving-message-from-renderer-s

  • 在我的问题中,我使用NetBeans创建了单独的jframes。一个是使用textfield输入用户名和密码字段的登录框架。一旦登录,你就会进入下一个框架,回家。现在,我在home框架上放置了一个标签,以显示登录用户的名称。现在我想知道如何获得应用在登录框中的用户名来显示在这个标签中。提前感谢…在这方面的任何帮助都是非常感谢的。谢了。我想从登录框架中获取登录用户名以显示在主框架中。我尝试了以下代码

  • 问题内容: 我正在尝试使用AJAX在Express应用程序上使用Passport库调用登录验证。我使用这样的本地策略: 问题是我不知道如何将变量传递给Passport,模仿bodyparser.json()功能,我试图做这样的事情: 编辑- 我的策略: 传递凭据错误仍然存​​在,即时消息: 对象{细节:对象}细节:Objectmessage:“缺少凭据” 原 : 有人可以指出我正确的方向吗? 问题

  • 我有一个音频应用程序,我需要捕捉麦克风样本编码到mp3与ffmpeg 首先配置音频:

  • Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 Express 框架核心特性: 可以设置中间件来响应 HTTP 请求。 定义了路由表用于执行不同的 HTTP 请求动作。 可以通过向模