2017-06-26 26 views
0

私はnext.jsの問題に直面していますnext.jsのgetInitialPropsメソッドを使用してクッキーを取得するにはどうすればいいですか?

async static getInitialPropsからリクエストを送信すると、Cookieを取得できません。私が得るundefined

しかし私がcomponentWillMountでそれを作りているときは問題ありません。残念ながら、コンポーネントが呼び出される前にクッキー情報を取得する必要があるので、それは遅すぎます。だから私は、私はすでに成功せずにしようとしました。ここgetInitialProps

でそれを取得する必要があります:

static async getInitialProps() { 
 
     const res = await axios.get('http://mybackend/getCookie'); 
 
     return {data : res.data} 
 
    } 
 
    
 
    //res.data = undefined

任意の提案?

答えて

1

これはクライアントとサーバーの関係である可能性があります。componentWillMount()はクライアントでのみ実行されるため、クライアントのCookieが常に含まれます。ただし、getInitialPropsがサーバー上で実行される可能性があります。その場合は、手動でCookieを設定する必要があります。

それはoptions.reqの存在を試験することにより、サーバー対クライアント上で実行している場合は、伝えることができます:

static getInitialProps({ req }) { 
    if (req) { 
    console.log('on server, need to copy cookies from req') 
    } else { 
    console.log('on client, cookies are automatic') 
    } 
    return {}; 
} 

そして、サーバー上で動作しているとき、あなたはreq.headers.cookieをチェックすることで、クライアントのクッキーを読むことができます。したがって、斧では、次のようになります。

static async getInitialProps({req}) { 
    const res = await axios({ 
    url: 'http://mybackend/getCookie', 
    // manually copy cookie on server, 
    // let browser handle it automatically on client 
    headers: req ? {cookie: req.headers.cookie} : undefined, 
    }); 
    return {data : res.data} 
} 
+1

ありがとうございました。最後に、私が約48時間から私が苦労している問題を解決するのを助けます。私は 'req.cookies'を作ることに焦点を当てていました。私は決断を下した' req.headers.cookie'という魔法を試みたことはありませんでした。今はすべてが期待通りに機能します。どうもありがとう !! – Jack

+0

いや、多くのクッキー解析ライブラリはreq.cookiesに結果を格納しますが、元の/ raw値はヘッダ内にあります。 –

関連する問題