我最近从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的方法吗?
答案 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)
原因应该是因为res
是http
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();
}
]
}
},