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

时间:2014-12-08 20:01:05

标签: node.js session cookies browser-sync

我最近从Express网络应用程序转移到了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);

我的团队已经开始使用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
    });
});

但是,res对象没有名为“cookie”的方法。是否有类似session middleware for Expressjs的东西可用作BrowserSync中间件?还有另一种在BrowserSync服务器中设置cookie的方法吗?

3 个答案:

答案 0 :(得分:3)

我有同样的TypeError: res.cookie is not a function - 错误。以下配置适用于我。

  browsersync: {
    open: false,
    port: 8080,
    server: {
      baseDir: distDir,
      middleware: [
        function(req, res, next) {
          res.setHeader('set-cookie', 'name=value');

          next();
        }
      ]
    }
  },

答案 1 :(得分:0)

原因应该是因为reshttp https://nodejs.org/api/http.html#http_class_http_serverresponse的原生回复对象 其中cookie方法不可用

答案 2 :(得分:-2)

浏览器同步使用connect,其API与表达略有不同。这个配置让我可以使用browser-sync为我的回复添加标题和cookie:

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