NextJS-如何处理重定向,同时我的策略返回错误

时间:2018-10-09 11:29:15

标签: reactjs next

我正在尝试获取在浏览器中输入的URL,以便在NextJS定制服务器中进行一些重定向。此错误仅在开发模式下发生,在生产模式下不发生,是否正常?有一些修改可以在devmode上处理吗?

我尝试使用路径名对象。可悲的是,当我第一次在地址栏中输入URL时,我的路径名首先返回:

  

/ _ next / static / chunks / 0.js

我已尝试使用req.rawHeaders。但是直到第15次试用,我的控制台什么都没有返回:

  next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:

     next.server.js中的

req.rawHeaders路径:/ pathTargeted //工作!但是有点晚..

我也尝试过使用req.headers.referer,但是即使返回的第一个路径也不是我在URL中输入的路径。

结果是我陷入404错误。那么,如何避免这种情况并始终获取在浏览器中输入的真实地址呢?那正是我的问题。

这是我的reactjs代码段:

import React, {Component} from "react"; 
import style from "./BlogHubTemplate.module.css";

import storeWrapper from "../../HOC/storeWrapper/storeWrapper"
import {connect} from 'react-redux';

import Router from 'next/router'


class BlogHubTemplate extends Component { 

    redirectPost = (postCategory, postTitle) => { 
        Router.replace(`/${postCategory}/${postTitle}`) 
    }

这是我自定义的next.server js:

app.prepare().then(() => {
 createServer((req, res) => {
 // Be sure to pass `true` as the second argument to `url.parse`.
 // This tells it to parse the query portion of the URL.
 const parsedUrl = parse(req.url, true)
 const { pathname, query } = parsedUrl; 

 console.log("req.headers in next.server.js : ", req.headers.referer.substr(22))
 console.log("req.rawHeaders path in next.server.js : ", req.rawHeaders[11].substr(22))

任何提示都会很棒, 谢谢

1 个答案:

答案 0 :(得分:2)

这不是next.js问题

只需在使用decodeURIComponent的每个地方添加window.location.pathname


28条代码行https://github.com/Hocoh/redirect_next/blob/master/ui/pages/post.js#L29

而不是:

  var postFullPath = window.location.pathname.substr(1) ;

应为:

  var postFullPath = decodeURIComponent(window.location.pathname).substr(1) ;


38条代码行https://github.com/Hocoh/redirect_next/blob/master/ui/pages/blog.js#L38

而不是:

var pageTargeted = window.location.pathname.substr(11) ; 

应为:

var pageTargeted = decodeURIComponent(window.location.pathname).substr(11) ; 

13码行

https://github.com/Hocoh/redirect_next/blob/master/ui/components/BlogHubTemplate/utils/Pagination/Pagination.js#L13

代替

   window.location.pathname = `blog/page/${pageTargeted}`

应该是:

  Router.push(decodeURIComponent(`blog/page/${pageTargeted}`))


10条代码行

https://github.com/Hocoh/redirect_next/blob/master/ui/components/BlogHubTemplate/utils/Pagination/PaginationMain/PaginationMain.js#L10

代替:

window.location.pathname = `blog/page/${pageTargeted}`

应为:

  Router.push(decodeURIComponent(`blog/page/${pageTargeted}`))

第31行代码

https://github.com/Hocoh/redirect_next/blob/master/ui/components/BlogHubTemplate/BlogHubTemplate.js#L31

代替:

Router.replace(`/${postCategory}/${postTitle}`);

应为:

Router.push(decodeURIComponent(`/${postCategory}/${postTitle}`));

并将decodeURIComponent添加到另一个文件