大家知道,跨域问题可以用cors;但是跨域问题下依然另外一个问题:跨域设置cookie;
前端处理
1:fetch发送带有诸如cookie之类的凭证的请求。你可以在选项对象中将credentials属性值设置为“include”:
fetch(url,{
credentials:"include"
})
注意:设置跟header平行;不能写在header里面;
2:axios允许携带凭证
axios.defaults.withCredentials=true
后端处理
var createError = require('http-errors');
var express = require('express');
var path = require('path');
//设置cookie
var cookieParser = require('cookie-parser');
//跨域问题
var cors = require('cors')
//session中间件
// var session=require('express-session')
var logger = require('morgan');
var indexRouter = require('./routes/index');
var testRouter = require('./routes/test');
var loop = require('./routes/loop');
var lesson = require('./routes/lesson');
var details = require('./routes/details');
var register = require('./routes/register');
var login = require('./routes/login');
var isLogin = require('./routes/isLogin');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//自定义中间件,设置跨域需要的响应头。
// var allowCrossDomain = function (req, res, next) {
// //可以跨域
// // res.header('Access-Control-Allow-Origin', req.headers.origin);
// res.header('Access-Control-Allow-Origin','http://localhost:2000' );
// res.header('Access-Control-Allow-Credentials', true);
// res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
// res.header("Access-Control-Max-Age", "3600");
// //携带凭证session(credentials必须写)
// res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length ,Authorization , Accept ,X-Requested-With ,credentials');
// // response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length,Authorization,Access,X-Requested-With,my-http-header");
//
//
//
// if(req.method=='OPTIONS'){
// res.send(200)
// }else{
// next();
// }
// };
//
// app.use(allowCrossDomain);//运用跨域的中间件
var corsOptions = {
origin: 'http://localhost:2000',
credentials:true,
}
app.use(cors(corsOptions))
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// app.user(session({
// resave:true, //每次重新保存
// secriet:'haohao', //加密
// saveUninitialized:true, //是否保存未初始化状态
// }))
app.use('/', indexRouter);
app.use('/test', testRouter);
//获取轮播图接口
app.use('/loop', loop);
//获取课程接口
app.use('/lesson', lesson);
//获取课详情程接口
app.use('/details', details);
//登录接口
app.use('/login', login);
//注册接口
app.use('/register', register);
//登录接口
app.use('/login', login);
//是否已经登录的接口
app.use('/isLogin', isLogin);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;