Umi: 请教下,目前getInitialProps无法获取location对象,那如何获取到url中的query参数列表?

Created on 14 Jul 2020  ·  19Comments  ·  Source: umijs/umi

What happens?

请教下,目前getInitialProps无法获取location对象,那如何获取到url中的query参数列表?

  • Umi 版本:v3.2.9
  • Node 版本:v12.18.0
  • 操作系统:mac
type(ssr)

Most helpful comment

3.2.9中 ssr node端 history.location 没有解析出query, 在req对象中有search,也需要自己解析。

All 19 comments

Screen Shot 2020-07-14 at 18 56 54

这些不足以获取你需要的东西么?按理说不应该啊

Screen Shot 2020-07-14 at 18 56 54

这些不足以获取你需要的东西么?按理说不应该啊

不能满足啊,例如我url是这样的:http://localhost:8000/index?cid=110 我需要拿到cid来做一些处理,上面几个固定参数貌似都拿不到啊

Screen Shot 2020-07-14 at 18 56 54

这些不足以获取你需要的东西么?按理说不应该啊

已经看了好多文档了,貌似都没有这样获取的方式,难道现在前端开发不需要这样传参数吗?不应该啊。。

history里面没有location么?

history里面没有location么?

我这一直都拿不到history, history是undefined的

看看例子或者提个复现

看看例子或者提个复现

我把官方的例子跑了一遍,发现ssr是可以拿到的,但是csr就是undefined了,我想要的时候csr也能拿的到

这样吧,先用isServer判断是否是ssr,在ssr里用history.location,如果isServer是false,表示在csr状态,那么直接用window.location吧

isServer只在getinitalprops里面拿得到,csr模式下也是建议用history,可以看看这个https://umijs.org/zh-CN/api#withrouter,应该都是有的。

这样吧,先用isServer判断是否是ssr,在ssr里用history.location,如果isServer是false,表示在csr状态,那么直接用window.location吧

这是个好办法

这样吧,先用isServer判断是否是ssr,在ssr里用history.location,如果isServer是false,表示在csr状态,那么直接用window.location吧

之前就是太纠结ssr与csr一致问题了,没想到这个

这样吧,先用isServer判断是否是ssr,在ssr里用history.location,如果isServer是false,表示在csr状态,那么直接用window.location吧

isServer只在getinitalprops里面拿得到,csr模式下也是建议用history,可以看看这个https://umijs.org/zh-CN/api#withrouter,应该都是有的。

多谢两个大佬了

image
csr模式下也是有的,跑下例子吧https://github.com/umijs/umi/tree/master/examples/ssr-koa

image
csr模式下也是有的,跑下例子吧https://github.com/umijs/umi/tree/master/examples/ssr-koa

你那版本多少的,我本地就是跑这个,是拿不到的,对了,我是用umi dev跑起来的,没有直接跑server.js
image

提个复现吧,不知道你是啥环境,用的最新版本的

提个复现吧,不知道你是啥环境,用的最新版本的

我没加什么,就是master分支拉下来直接跑的

提个复现吧,不知道你是啥环境,用的最新版本的

@williamnie 我已经用 @leftstick 的方案解决问题了,这个问题先关了吧,再次感谢啊

3.2.9中 ssr node端 history.location 没有解析出query, 在req对象中有search,也需要自己解析。

export const getQueryVariable = (locationSearch: string, variable: string) => {
    if (locationSearch.startsWith('?')){
      locationSearch = locationSearch.substring(1);
    }
    var vars = locationSearch.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == variable) {
            return decodeURIComponent(pair[1]);
        }
    }
    console.log('Query variable %s not found', variable);
    return '';
}
Was this page helpful?
0 / 5 - 0 ratings

Related issues

zemzheng picture zemzheng  ·  3Comments

nguyenhuutinh picture nguyenhuutinh  ·  3Comments

tauruswang picture tauruswang  ·  3Comments

ironyfive picture ironyfive  ·  3Comments

y2891663091 picture y2891663091  ·  4Comments