Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用express获取post请求后,会话未保存_Javascript_Session_Express_Cookies - Fatal编程技术网

Javascript 使用express获取post请求后,会话未保存

Javascript 使用express获取post请求后,会话未保存,javascript,session,express,cookies,Javascript,Session,Express,Cookies,我用fetch发出post请求,并将令牌保存到express api后端的会话中。但是,即使我在fetch中将凭证设置为include,令牌也不会保存在会话中。谁能帮我找出这个问题吗?谢谢 正在向api服务器发送令牌: fetch('http://localhost:3000/api/users', { method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'ap

我用fetch发出post请求,并将令牌保存到express api后端的会话中。但是,即使我在fetch中将
凭证设置为
include
,令牌也不会保存在会话中。谁能帮我找出这个问题吗?谢谢

正在向api服务器发送令牌:

 fetch('http://localhost:3000/api/users', {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    credentials: 'include',
    body: JSON.stringify({
      accessToken: user.accessToken,

    })
  })
  .then(res => res.json())
  .then(json => {
    console.log(json);
  })
  .catch(error => {
    console.log(error);
  });
服务器端:

app.use(morgan('dev'))
app.use(cors({credentials: true}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({secret: 'ssshhhhh', resave: true, saveUninitialized: true}));


app.post('/api/users', function(req, res) {
  if (!req.session.accessToken) {

    req.session.accessToken = req.body.accessToken;
  }
  ...
  ...
})

app.get('/api/users/token', function(req, res) {
  console.log(req.session);
  if (req.session.accessToken) {
    return res.json({ accessToken: req.session.accessToken });
  }
  return res.json({ accessToken: null });
})
正在从会话检索令牌:

fetch('http://localhost:3000/api/users/token', {
  credentials: 'include' 
})
.then(checkStatus)
.then(response => {
  return response.json();
})
.then(json => {
  console.log(json);
})
.catch(err => {
  console.error(err);
});
编辑: 这是来自请求的标题:

{ host: 'localhost:3000',
  accept: '*/*',
  'if-none-match': 'W/"4d-oW2yTGBOs6aaA4LAPgNxNQ"',
  cookie: 'connect.sid=s%3AHXDL6Az0hRZeSGsJgjhw4kvVONBLz-yn.sOOAqbxaLQ6Z%2FfCdfGOmXf9XsYl3JdHvP%2FmfkUln1xA',
  'user-agent': 'cairn/1 CFNetwork/758.2.8 Darwin/15.3.0',
  'accept-language': 'en-us',
  'accept-encoding': 'gzip, deflate',
  connection: 'keep-alive' }
Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: false } }
GET /api/users/token 304 23.780 ms - -
{ host: 'localhost:3000',
  'content-type': 'application/json',
  cookie: 'connect.sid=s%3A1jat379BSZQCKvJV1pKL4_Cub9ApMFVI.m%2BQHkIewMl9Uzjg315GTC5aD5qpWESiQVNDnXrFFSbQ',
  connection: 'keep-alive',
  'if-none-match': 'W/"270-toaMUba3dhoaPENGp5EGaA"',
  accept: 'application/json',
  'accept-language': 'en-us',
  'content-length': '484',
  'accept-encoding': 'gzip, deflate',
  'user-agent': 'cairn/1 CFNetwork/758.2.8 Darwin/15.3.0' }

如果使用浏览器调用这些服务器端终结点会发生什么情况?@Leventix我会得到相同的结果。请尝试删除
cookieParser
中间件,或者将其与
会话
赋予相同的机密。如果不起作用,请尝试
console.log
记录每个请求的请求头和请求体。也许你的饼干不是由client@jwags我认为问题来自客户的要求。我可以通过在浏览器中点击端点来保存会话。我认为cookie解析器可能需要在前面使用app.use()。这可能是因为cors可能需要cookies。