如何通过BrowserSync中间件设置会话cookie?

Tro*_*roy 6 cookies session node.js browser-sync

我最近从Express Web应用程序迁移到了nodejs 的BrowserSync应用程序.使用Express,如果我想设置一个cookie,我的配置看起来像这样:

var express = require('express');
var session = require('express-session');
var finalhandler = require('finalhandler');
var serveStatic = require('serve-static'),
    serve = serveStatic(__dirname);

var app = express();
app.use(session({  // see https://github.com/expressjs/session
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: false
  }))
  .use(function(req, res, next) {
    res.cookie('myCookie', 'my cookie value');
    var done = finalhandler(req, res);
    serve(req, res, done);
  });
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

我的团队已经开始使用BrowserSync(通过gulp任务),到目前为止,我的配置看起来像这样:

var gulp = require('gulp'),
    browserSync = require('browser-sync'),
    gulpLoadPlugins = require('gulp-load-plugins'),
    plugins = gulpLoadPlugins();

gulp.task('browser-sync', function() {
    browserSync({
        server: {
            baseDir: "./",
            middleware: [
                function(req, res, next) {
                    res.cookie('myCookie', 'my cookie value');
                    next();
                }
            ]
        },
        port: 8080
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,该res对象没有名为"cookie"的方法.是否有类似于Expressjs会话中间件,它将作为BrowserSync中间件工作?还有另一种在BrowserSync服务器中设置cookie的方法吗?

小智 -2

浏览器同步使用connect,它的 API 与 express 略有不同。此配置帮助我使用浏览器同步向我的响应添加标头和 cookie:

  browsersync: {
    open: false,
    port: 8080,
    server: {
      baseDir: distDir,
      middleware: [
        function(req, res, next) {
          res.setHeader('hello', 'world');
          res.cookie('someCookie', 'cookieVal');
          next();
        }
      ]
    }
  },
Run Code Online (Sandbox Code Playgroud)

  • 这似乎对我不起作用,它告诉我“TypeError:res.cookie不是一个函数”。它对你还有效吗?我使用的是 browserSync 2.8.2 (2认同)