2016-01-15 14 views
7

Ho un'applicazione nodejs che gestisce le richieste dell'utente e riceve i cookie che voglio proxy al servizio API interno. Come avvicinarsi a questo usando node-fetch?Come inviare cookie con node-fetch?

Non offrire superagente per favore.

risposta

10

Dovreste essere in grado di passare lungo i cookie impostandolo nell'intestazione della richiesta:

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

Non hai bisogno di node-featch, puoi leggere i cookie degli utenti dall'intestazione della richiesta "Cookie". Vedere https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_message_headers

Tuttavia, se si utilizza la richiesta tra domini, è necessario configurare la richiesta client con withCredential e aggiungere intestazioni CORS sul server. Vedere questo: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

Hai frainteso ciò che cerco di raggiungere. Non si tratta di client per server, si tratta di server-to-server. Ho una richiesta in arrivo nell'applicazione nodejs. Sì, non ho bisogno di node-fetch per leggere i cookie poiché lo ho già da oggetto richiesta. Quello di cui ho bisogno è di passare questi cookie con un'altra richiesta di API esterna. È possibile proxy questi cookie con node-fetch in qualche modo o no? – Skay

+0

Ecco un esempio con superagent - https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/helpers/ApiClient.js#L33 - è possibile fare lo stesso con node-fetch? – Skay

-1

Per semplice, è possibile scrivere un middleware che includerà i cookie per global.fetch , come sotto.

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; 
Problemi correlati