问题 如何使用node-fetch发送cookie?


我有nodejs应用程序处理用户的请求并接收我想代理内部API服务的cookie。如何通过使用node-fetch来解决这个问题?

请不要提供superagent。


7088
2018-01-15 16:42


起源



答案:


您应该能够通过在请求的标头中设置cookie来传递cookie:

const opts = {
    headers: {
        cookie: 'accessToken=1234abc; userId=1234'
    }
};
const result = await fetch(`/some/url`, opts);

14
2018-02-07 20:21





简单来说,您可以编写一个中间件,其中包含对global.fetch的cookie,如下所示。

const realFetch = fetch;

function cookieFetch(fetch, cookie) {
  return (url, opts) => {
    opts = opts || {};
    return fetch(url, Object.assign(opts, {
      headers: Object.assign(opts.headers || {}, { cookie })
    }));
  };
}

function middleware(req, res, next) {
  const kuki = req.headers.cookie;
  global.fetch = kuki ?
    cookieFetch(realFetch, kuki) :
    realFetch;
  next();
}

module.exports = middleware;

-1
2017-08-28 09:05





您不需要node-featch,您可以从请求标题“Cookie”中读取用户cookie。看到 https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_message_headers

但是,如果使用跨域请求,则必须使用withCredential配置客户端请求并在服务器上添加CORS标头。看到这个: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS


-4
2018-01-15 17:30



你误解了我试图实现的目标。它不是客户端到服务器,而是服务器到服务器。我在nodejs应用程序中有传入请求。是的,我不需要节点读取来读取cookie,因为我已经从请求对象中获取了它。我需要的是将这些cookie与另一个请求传递给外部API。是否有可能以某种方式使用node-fetch代理这些cookie? - Skay
以下是superagent的一个例子 - github.com/erikras/react-redux-universal-hot-example/blob/...  - 是否可以对节点提取进行相同的操作? - Skay


答案:


您应该能够通过在请求的标头中设置cookie来传递cookie:

const opts = {
    headers: {
        cookie: 'accessToken=1234abc; userId=1234'
    }
};
const result = await fetch(`/some/url`, opts);

14
2018-02-07 20:21





简单来说,您可以编写一个中间件,其中包含对global.fetch的cookie,如下所示。

const realFetch = fetch;

function cookieFetch(fetch, cookie) {
  return (url, opts) => {
    opts = opts || {};
    return fetch(url, Object.assign(opts, {
      headers: Object.assign(opts.headers || {}, { cookie })
    }));
  };
}

function middleware(req, res, next) {
  const kuki = req.headers.cookie;
  global.fetch = kuki ?
    cookieFetch(realFetch, kuki) :
    realFetch;
  next();
}

module.exports = middleware;

-1
2017-08-28 09:05





您不需要node-featch,您可以从请求标题“Cookie”中读取用户cookie。看到 https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_message_headers

但是,如果使用跨域请求,则必须使用withCredential配置客户端请求并在服务器上添加CORS标头。看到这个: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS


-4
2018-01-15 17:30



你误解了我试图实现的目标。它不是客户端到服务器,而是服务器到服务器。我在nodejs应用程序中有传入请求。是的,我不需要节点读取来读取cookie,因为我已经从请求对象中获取了它。我需要的是将这些cookie与另一个请求传递给外部API。是否有可能以某种方式使用node-fetch代理这些cookie? - Skay
以下是superagent的一个例子 - github.com/erikras/react-redux-universal-hot-example/blob/...  - 是否可以对节点提取进行相同的操作? - Skay