最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 《全栈导航》网站挂掉-我是如何排查问题

    正文概述 掘金(vipbic)   2021-08-14   415

    问题

    我突然发现,网站刷新的时候打不开了,如果是路由跳转进去,是正常的

    《全栈导航》网站挂掉-我是如何排查问题

    排查

    通过检查,是在父级页面请求的数据,传到子组件数据丢失

    page.js 页面

    <template>
        <div class="aritcle-detail">
            <Header />
            <div class="wp clearfix">
                <Detail :detail="detail"></Detail>
            </div>
            <Footer />
        </div>
    </template>
    <script>
    import { apiNavthemeDetail } from '@/api/navtheme'
    import Detail from '@/web/article/Detail'
    export default {
        components:{
            Detail
        },
        async asyncData({ $axios, app, store, params,route }) {
            console.log('router',params.id);
            const res = await apiNavthemeDetail({ id: params.id });
            return {
                detail: res.data,
                params
            }
        },
        mounted() {
             setTimeout(() => {
                console.log('params', this.params)
                console.log('detail', this.detail)
            }, 3000)
        }
    }
    </script>
    

    Detail子组件

    <template>
        <div class="detail">
            <div class="detail-left">
                <div class="info">
                    <div class="header">
                        <h1>{{detail.title}}</h1>
                        <div class="meta">
                            <span>
                                {{detail.member.it_name}}次
                            </span>
                        </div>
                    </div>
                    <div class="user">
                        <div class="user-left">
                            <div class="img">
                                <img :src="detail.member.userhead" alt />
                            </div>
                            <div class="name">
                                <b>{{detail.member.username}}</b>
                                <span class="user-title">{{detail.member.description}}</span>
                            </div>
                        </div>
                    </div>
                    <div class="content article-md">
                        <no-ssr>
                            <mavon-editor
                                class="detail-md itnavs-markdown"
                                :value="detail['content']"
                                :subfield="false"
                                :defaultOpen="'preview'"
                                :toolbarsFlag="false"
                                :editable="false"
                            />
                        </no-ssr>
                    </div>
                </div>
                <div class="community">
                    <img src="@/assets/images/qzdh.jpg" alt />
                </div>
            </div>
        </div>
    </template>
    <script>
    import Rightuser from './Rightuser'
    import Casually from './Casually'
    export default {
        components: {
            Rightuser,
            Casually
        },
        props: ['detail'],
    }
    </script>
    

    查看服务器日志

    nuxt.js 是node进程,启动的是用pm2,如有不懂,清查看我之前写的【文章】

    pm2 logs
    

    《全栈导航》网站挂掉-我是如何排查问题

    public function detail(){
            $id = input('id');
            $navtheme = new NavthemeModel();
            $detail = $navtheme->where('id',$id)->with(['member'=>function($query){
                $query->field('it_name');
            },'taxonomic'=>function($query){
                $query->field('name,id,parentid');
                $query->with('primary');
            }])->find();
            $navtheme->where('id',$id)->inc('hits',1)->update();
            $detail['recommended'] = $navtheme->recommended();
            return $this->showWebData(['data'=>$detail]);
    }
    

    推测,$navtheme去查找时失败,未查找到相关数据,导致member类型空,那么在客户端前端写法

    detail.member // 为undefined
    detail.member.it_name // 报错,undefined 下面没有数据属性,导致nuxt.js异常
    

    代码一直我未动过,为啥出现这种情况,不得奇解

    经过排查,我尝试在这里,打印id

    $id = input('id');
    dump($id)
    

    nginx日志

    通过宝塔面板可以查看到可视化查看nginx日志,当然也可以用命令行去查看,会更细致一些

    《全栈导航》网站挂掉-我是如何排查问题

    确认前端是否传入参数

    async asyncData({ $axios, app, store, params, router }) {
    	console.log('router ',router.id)
    	console.log(params.id)
    },
    

    nuxt.js asyncData 函数是在服务端执行,所以在客户端是看不到的,需要在服务端看,我继续使用pm2 logs查看

    《全栈导航》网站挂掉-我是如何排查问题

    axios.js参数传输过程中丢失

    首先确认axios.js版本,是否过于老旧

    {
      "name": "nuxt-itnavs",
      "version": "1.0.0",
      "private": true,
      "scripts": {
        "dev": "nuxt",
        "build": "nuxt build",
        "start": "nuxt start",
        "generate": "nuxt generate"
      },
      "dependencies": {
        "axios": "^0.21.1",
      },
      "devDependencies": {
        "@nuxtjs/style-resources": "^1.0.0",
        "vue-img-cutter": "^2.1.10"
      }
    }
    

    再次回到,问题所在 我突然发现,网站刷新的时候打不开了,如果是路由跳转进去,是正常的,清看开头,意思是直接进来的有问题,路由跳转的没问题

    Axios-中文文档

    查看axios.js封装

    // loca 其妙设计如果请求的过的数据直接取,不用发送请求
    const post = async(url, params, hand = { loca: false }) => {
        if (process.server) {
            const res = await http.post(handLastUrl(url), params);
            return res.data;
        } else {
            let key = url.replace(/\//g, 'A');
            if (key && hand.loca && window[key]) {
                return window[key];
            }
            const res = await http.post(handLastUrl(url), params);
            if (hand.loca) {
                window[key] = res.data;
            }
            return res.data;
        }
    }
    
    import qs from 'qs'; // 引用之前记得安装 npm i qs -S
    http.post(handLastUrl(url), qs.stringify(params));
    

    方法二

    如果想快速解决问题, 把参数直接带在url,不过这种情况,最好放置一些类似id,数据比较少的数据进行传输

    const apiTaxonomicItems = (params) => {
        return post(`${prefix}/taxonomic/items?id=${params.id}`, params)
    }
    export {
        apiTaxonomicItems,
    }
    

    修改后,打包后编译

    npm run build // 客户端
    

    打包完成后上传,.nuxt,static,nuxt.config.js,package.json,这四个文件

    pm2 restart all // 服务端 pm2重启
    

    此刻网站可以正常访问,详情页面刷新也都没问题,【全栈导航】

    写到最后

    今天是七夕节,祝大家节日快乐,

    人总是这样,大道理都懂,小情绪却难以自控,从幼稚到成熟,从单纯到复杂,我们都曾不堪一击,也终将刀枪不入。


    起源地下载网 » 《全栈导航》网站挂掉-我是如何排查问题

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元