问大家一个关于前后端分离的问题, Springboot + nuxt.js - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
afuler
V2EX    程序员

问大家一个关于前后端分离的问题, Springboot + nuxt.js

  •  
  •   afuler 2020-02-23 09:38:30 +08:00 4264 次点击
    这是一个创建于 2056 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 springboot 写了一个博客后端,nuxt 前端,现在遇到了这么个问题,毫无头绪。我的博客可以登录,登录之后可以查看前端的文章页面,但是一刷新就没有了,前端就显示 Cannot read property 'title' of undefined。
    现在排除了一些可能的问题,如果在后端把请求文章详情改成不需要登录,这个问题就没有了,刷新之后还是原来的文章。
    百度上搜了一下,但感觉都不是类似的问题,主要是不知道搜什么关键词,我搜过 vue 跨域请求,还有刷新之后没有登陆,还搜过刷新之后数据消失。
    我现在就是想搜索也不清楚应该改搜什么关键词,只能来问问了。
    16 条回复    2020-02-23 23:06:34 +08:00
    MOONLIGHTT
        1
    MOONLIGHTT  
       2020-02-23 09:52:56 +08:00
    大概率后端传输来的数据为空,也就是`data`为空,前端获取`data.title`属性就会出现这样的报错。d
    redford42
        2
    redford42  
       2020-02-23 10:00:11 +08:00
    打断点看看数据三
    打不来就在调接口那 console
    然后看看 network 接口返回得数据是不是没有 title
    ycpt2121
        3
    ycpt2121  
       2020-02-23 10:06:36 +08:00
    “如果在后端把请求文章详情改成不需要登录,这个问题就没有了,刷新之后还是原来的文章。‘这里最后一句什么意思,说清楚点,你可以看看 data.title 是不是必须的,自动动手改改源码
    helloworldchao
        4
    helloworldchao  
       2020-02-23 10:07:34 +08:00 via Android
    应该是第一次 render 时数据还未获取你直接调用了 title 所属对象,但这个对象还未赋值结果调用了 undefined.title 就报错了。可以在调用 title 的地方对对象先做个判空类似 obj & obj.titile
    afuler
        5
    afuler  
    OP
       2020-02-23 10:22:27 +08:00
    @ycpt2121 前端可以请求后端的文章详情,这个请求需要先登录。这个需要登录是在后端设置的,如果设置成不需要登录,刷新问题就没有了。
    sumarker
        6
    sumarker  
    PRO
       2020-02-23 10:27:02 +08:00
    有没有配置 nginx 是不是 nginx 的配置问题
    acthtml
        7
    acthtml  
       2020-02-23 10:31:06 +08:00
    页面和接口 2 个域下不?
    acthtml
        8
    acthtml  
       2020-02-23 10:31:36 +08:00
    我举个例子

    1. 页面和接口在不同域下,比如页面 example.com ,接口 api.example.com
    2. 登录凭证以 cookie 来保存,存放在接口域下 api.example.com

    那么,页面刷新时,服务端渲染会有这个过程:

    1. 整个服务请求是在域 example.com 下面的。
    2. 服务端渲染时所有异步请求拿到的是 example.com 下的 cookie,也就是拿不到登录凭证。

    解决方案是:

    1. 前端登录成功之后将登录凭证保存在页面域下面。
    2. 异步请求时,将登录凭证通过 http header 形式传送。
    agdhole
        9
    agdhole  
       2020-02-23 10:35:57 +08:00 via Android
    v-if title,或者用最新 es 的语法糖 :title="title ?? null"
    afuler
        10
    afuler  
    OP
       2020-02-23 11:17:43 +08:00
    判断了,是 undefined,现在就是似乎刷新之后 cookie 没有传到后端。
    afuler
        11
    afuler  
    OP
       2020-02-23 11:18:58 +08:00
    @acthtml 就是这个问题!
    afuler
        12
    afuler  
    OP
       2020-02-23 11:40:48 +08:00
    @acthtml withCredentials: true 这个原来设置了,但是还是不行,是需要自己手动保存 cookie 到页面域下面吗?
    afuler
        13
    afuler  
    OP
       2020-02-23 12:43:36 +08:00
    @acthtml 好像不是这个问题,因为其他页面能请求到跨域的 cookie。
    acthtml
        14
    acthtml  
       2020-02-23 14:59:26 +08:00
    @afuler
    你按我说的测一下,因为首次是在服务端运行的,所以要以 nodejs 运行结果为准。

    1、在接口开始请求时,打印下登录凭证。比如 console.log('my session id', cookies.get('my session id')).
    2、在 nodejs 控制台中查看有没有打印结果。
    3、如果没有打印出来 cookie,但事实上你对应的域下有该 cookie,那么就是我描述的问题。
    afuler
        15
    afuler  
    OP
       2020-02-23 19:35:07 +08:00
    @acthtml 我解决了,还是谢谢你!
    LinYa
        16
    LinYa  
       2020-02-23 23:06:34 +08:00
    @afuler 看了下没明白遇到什么问题,解决方案是什么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3559 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 00:17 PVG 08:17 LAX 17:17 JFK 20:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86