为什么在Router.push('url')调用后req是未定义的。 (未处理的拒绝(TypeError):无法读取未定义的属性“标头”。)

时间:2019-03-24 14:47:53

标签: reactjs next.js

im在next.js中是新的。 我想在router.push(/ *另一页* /)

之后获取Cookie
  

在index.js中:

children.attr('href')
  

在browser.js中:

Router.push('./browse');

1 个答案:

答案 0 :(得分:2)

您需要创建2个单独的函数才能从客户端和服务器端获取cookie。我的建议是使用js-cookie npm软件包在客户端获取cookie。所有这些在一起:

// 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;