Even though this question is asked several times at SO like:
fetch: Getting cookies from fetch response
or
Unable to set cookie in browser using request and express modules in NodeJS
None of this solutions could help me getting the cookie from a fetch() response
My setup looks like this:
Client
export async function registerNewUser(payload) { return fetch('https://localhost:8080/register', { method: 'POST', body: JSON.stringify(payload), credentials: 'same-origin', headers: { Accept: 'application/json', 'Content-Type': 'application/json' } }); } ... function handleSubmit(e) { e.preventDefault(); registerNewUser({...values, avatarColor: generateAvatarColor()}).then(response => { console.log(response.headers.get('Set-Cookie')); // null console.log(response.headers.get('cookie')); //null console.log(document.cookie); // empty string console.log(response.headers); // empty headers obj console.log(response); // response obj }).then(() => setValues(initialState)) } server
private setUpMiddleware() { this.app.use(cookieParser()); this.app.use(bodyParser.urlencoded({extended: true})); this.app.use(bodyParser.json()); this.app.use(cors({ credentials: true, origin: 'http://localhost:4200', optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204 credentials: true })); this.app.use(express.static(joinDir('../web/build'))); } ... this.app.post('/register', (request, response) => { const { firstName, lastName, avatarColor, email, password }: User = request.body; this.mongoDBClient.addUser({ firstName, lastName, avatarColor, email, password } as User) .then(() => { const token = CredentialHelper.JWTSign({email}, `${email}-${new Date()}`); response.cookie('token', token, {httpOnly: true}).sendStatus(200); // tried also without httpOnly }) .catch(() => response.status(400).send("User already registered.")) }) 
httpOnly: true, prevents clientside access