如何通过同构应用程序中的节点提取传递请求cookie?

时间:2016-04-10 22:09:09

标签: javascript node.js cookies reactjs isomorphic-javascript

我正在尝试使用来自this常见样板的React,Express和同构提取(基于客户端上的whatwg-fetch和服务器上的node-fetch)构建同构项目。我正在使用Cookie作为访问令牌,并且credentials: 'same-origin'在前端to send it使用GraphQL - 效果非常好。

问题是我不能在服务器端使用相同的解决方案 - node-fetch只是不支持从框中使用XMLHttpRequest cookie。我的获取请求来自路由器的几个抽象层,所以我不能只使用来自req的cookie值。

以下是我的server.js代码(full version):

server.get('*', async (req, res, next) => {
  try {
    // some presettings here..

    await Router.dispatch({ path: req.path, query: req.query, context }, (state, component) => {
      data.body = ReactDOM.renderToString(component);
    });

    res.send(template(data));
  } catch (err) {
    next(err);
  }
});

和路线的index.jsfull version):

export const action = async (state) => {
  const response = await fetch('/graphql?query={me{id,email}}', {
    credentials: 'same-origin',
  });
  const { data } = await response.json();
  // ...
  return <Login title={title} me={data.me} />;
};

如何将我的令牌从server.js传递到我的fetch模块?或者,也许有更好的决定?

1 个答案:

答案 0 :(得分:3)

首先,我希望你现在已经找到答案了!

其次,Cookie实际上只是标题。如果您需要发送cookie来授权服务器端请求,您始终只需创建cookie值所需的字符串并将其作为标题发送。

有关示例,请查看此服务器端node-fetch包装器如何将已保存的Cookie附加到出站请求:https://github.com/valeriangalliat/fetch-cookie/blob/master/index.js#L17