我正在尝试获取在浏览器中输入的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))
任何提示都会很棒, 谢谢
答案 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码行
代替
window.location.pathname = `blog/page/${pageTargeted}`
应该是:
Router.push(decodeURIComponent(`blog/page/${pageTargeted}`))
10条代码行
代替:
window.location.pathname = `blog/page/${pageTargeted}`
应为:
Router.push(decodeURIComponent(`blog/page/${pageTargeted}`))
第31行代码
代替:
Router.replace(`/${postCategory}/${postTitle}`);
应为:
Router.push(decodeURIComponent(`/${postCategory}/${postTitle}`));
并将decodeURIComponent
添加到另一个文件