Reputation: 141
im new in next.js. i want get cookies after router.push(/* another page */)
in index.js:
Router.push('./browse');
in browse.js:
static async getInitialProps({req,res}) {
console.log(req.headers.cookie); // Unhandled Rejection (TypeError): Cannot read property 'headers' of undefined.
}
Upvotes: 0
Views: 802
Reputation: 697
You need to create 2 separated function to get cookies from client side and server side as well. My recommendation is to use js-cookie
npm package to get cookies on client-side. All of it together:
// utils/cookie.js
import cookie from 'js-cookie';
const getCookieFromBrowser = key => cookie.get(key);
const getCookieFromServer = (key, req) => {
if (!req.headers.cookie) return false;
const rawCookie = req.headers.cookie
.split(';')
.find(c => c.trim().startsWith(`${key}=`));
if (!rawCookie) return false;
const [, token] = rawCookie.split('=');
if (!token) return false;
return token;
};
export const getCookie = (key, req) => {
if (process.browser) return getCookieFromBrowser(key);
return getCookieFromServer(key, req);
};
// component
import React from 'react';
import { getCookie } from './utils/cookie'
const Page = (props) => <h1>Page</h1>;
Page.getInitialProps = ({ req, res }) => {
const token = getCookie('token', req);
console.log(token)
};
export default Page;
Upvotes: 3