闲暇时光 🌑
闲暇时光
我の闲暇时光 time flies
静谧时光,执笔抒心,岁月痕迹甚好。
109
21
58



vue路由history模式刷新404问题解决方案

2022-06-07 14:37:24 - 2025-07-06 00:13:03
無慕 - 1.62K - 6.92分钟 - 2.31K

vue单页因微信分享和自动登陆须要,对于URL中存在’#’的地址,处理起来比较坑。

用history模式就不会存在这样的问题。可是换成history模式,就会有个新的问题,就是页面刷新后,页面就没法显示了(404)。

对于这个问题,只需要配置网站Nginx就可以了

server {
        listen       8888;#默认端口是80,若是端口没被占用能够不用修改
        server_name  localhost;
        root        E:/vue/my_project/dist;#vue项目的打包后的dist
        
        
        ##############修改配置文件,以上部分应该默认存在,下面两个location是重点#############
        location / {
            try_files $uri $uri/ @router;#须要指向下面的@router不然会出现vue的路由在nginx中刷新出现404
            index  index.html index.htm;
        }
        #对应上面的@router,主要缘由是路由的路径资源并非一个真实的路径,因此没法找到具体的文件
        #所以须要rewrite到index.html中,而后交给路由在处理请求资源
        location @router {
            rewrite ^.*$ /index.html last;
        }
        #.......该文件其余部分于此功能无关,省略
  }

编程 - 前端
浏览器 vue 问题 笔记 前端

ThinkPHP中开启swoole一段时间后数据库连接出错

2021-11-13 09:12:46 - 2025-07-06 00:13:03
無慕 - 285 - 4秒 - 1.68K

这个错误一般是数据库断开后不再自动连接导致的。

需要将 config['break_reconnect'] 的值设置为 true, 才会开启断线重连。

一般在database.php 配置文件中:

//断线重连
'break_reconnect' => true,

但有些版本不在此文件中,可以从thinkphp/library/think/db/Connection.php找到,再找不到,请全局搜索!

最后,一般造成这样的原因可能是因为数据库连接次数过多,还是要优化代码,可以考虑添加缓存,减少数据库的连接。

编程 - 后端
Swoole ThinkPHP 问题

MySQL中concat、concat_ws、group_concat的使用

2021-04-28 09:46:17 - 2025-07-06 00:13:02
無慕 - 1.59K - 6秒 - 1.78K

concat()函数

 作用:

函数用于将多个字符串连接成一个字符串。

返回值:

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
SELECT CONCAT('My', NULL, 'QL');//只要有一个为null,则输出null
NULL
SELECT CONCAT(14.3);
'14.3'

concat_ws()函数

 作用:

函数用于将多个字符串连接成一个字符串。

返回值:

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

参数说明:

第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

SELECT CONCAT_WS(',','First name','Second name','Last Name');
'First name,Second name,Last Name'
SELECT CONCAT_WS(',','First name',NULL,'Last Name');//null会直接忽略
'First name,Last Name'
SELECT CONCAT_WS(',','First name','','Last Name');//空是可以正常连接的
'First name,,Last Name'

group_concat()函数

语法说明

group_concat函数的作用是将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

(1) 基本语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc  ] [separator '分隔符'] );

(2) 说明:可以使用distinct排除重复值;可以使用order by子句对结果中的值进行排序。

(3) 返回的字符串的默认分隔符从逗号(,),若要改为其他分隔符,则使用SEPARATOR子句修改分隔符。

举例

select user_id,GROUP_CONCAT(`like_name` order by `create_time` desc SEPARATOR ',' )
FROM user_table  
WHERE user_id > 10 GROUP BY user_id

上方SQL对应的情况举例:

假设表结构为id(主键)、user_id(用户id)、like_name(爱好)、create_time(创建时间),想一次性查询出每个人的所有爱好(每条记录代表一个人),不用二次数据处理。

编程 - 数据库
MySQL 问题

浏览器头部title切换

2021-04-27 09:30:44 - 2025-07-06 00:13:02
無慕 - 1.88K - 22秒 - 2.01K

自己查找函数写的菜鸟代码,不喜勿喷~

//浏览器检测切换
var back_tab_settimeout;
var leave_tab_setinterval;
var leave_arr = {
    0: '∑(っ°Д°;)っ卧槽,人不见了~',
    1: 'Σσ(・Д・;)我可什么都没做!!!',
    2: '(σ゚∀゚)σ..:*☆哎哟,干嘛去了',
    3: '(*╹▽╹*) 回来看看我好不好',
    4: '凸(`0´)凸 鄙视中途离站',
    5: '(´థ౪థ)σ你竟然是这样的人',
    6: '(╥╯﹏╰╥)ง 不理我我走了',
    7: 'Σ(σ`•ω•´)σ 起飞,再见!',
    8: '(((┏(; ̄▽ ̄)┛ 装完逼就跑!',
};
var leave_arr_length = Object.keys(leave_arr).length;
if (document.hidden !== undefined) {
    document.addEventListener('visibilitychange', () => {
        var is_tab_windows = document.hidden;
        if (is_tab_windows) {
            clearTimeout(back_tab_settimeout);
            $('link[rel=icon]').attr('href', '/favicon2.ico');
            $('title').html("。。。。。。");
            var setInterval_num = 0;
            leave_tab_setinterval = setInterval(function () {
                if (leave_arr_length <= setInterval_num) {
                    setInterval_num = 0;
                }
                $('title').html(leave_arr[setInterval_num]);
                setInterval_num++;
            }, 5000);
        } else {
            clearInterval(leave_tab_setinterval);
            $('link[rel=icon]').attr('href', '/favicon3.ico');
            $('title').html('(((o(*゚▽゚*)o)))♡ 欢迎回来~');
            back_tab_settimeout = setTimeout(function () {
                $('link[rel=icon]').attr('href', '/favicon.ico');
                $('title').html("{:get_web_config_info('name')}");
            }, 5000)
        }

    })
}

编程 - 前端
浏览器 问题 JavaScript 收藏

获取移动设备的类型和型号

2021-04-27 09:30:05 - 2025-07-06 00:13:02
無慕 - 1.85K - 18秒 - 1.86K

需要引入js文件:mobile-detect.js

function get_mobile_data() {
    //设置默认值
    var visit_mobile_details = {'system': '', 'system_type': ''};
    var device_type = navigator.userAgent;//获取userAgent信息
    var md = new MobileDetect(device_type);//初始化mobile-detect
    var os = md.os();//获取系统
    var model = "";
    if (os == "iOS") {
        //ios系统的处理
        os = md.os() + md.version("iPhone");
        model = md.mobile();
    } else if (os == "AndroidOS") {
        //Android系统的处理
        os = md.os() + md.version("Android");
        var sss = device_type.split(";");
        var i = sss.contains("Build/");
        if (i > -1) {
            model = sss[i].substring(0, sss[i].indexOf("Build/"));
        }
    }
    visit_mobile_details.system = os;//系统类型
    visit_mobile_details.system_type = model;//设备型号
    return visit_mobile_details;
}

编程 - 前端
问题 JavaScript

禁止选中和右键功能

2021-04-27 09:29:47 - 2025-07-06 00:13:02
無慕 - 138 - 34秒 - 1.69K
document.oncontextmenu=new Function("event.returnValue=false");
document.onselectstart=new Function("event.returnValue=false");

编程 - 前端
问题 JavaScript

获取浏览器信息

2021-04-27 09:29:27 - 2025-07-06 00:13:02
無慕 - 3.98K - 41秒 - 1.78K

返回的是:浏览器类型和版本号

function getExplorerInfo() {
    let explorer = window.navigator.userAgent;
    explorer = explorer.toLowerCase();
    //遨游浏览器
    if (explorer.indexOf('maxthon') >= 0) {
        let ver = explorer.match(/maxthon\/([\d.]+)/)[1] || '';
        return '傲游浏览器' + ver;
    }
    //QQ浏览器
    if (explorer.indexOf('qqbrowser') >= 0) {
        let ver = explorer.match(/qqbrowser\/([\d.]+)/)[1] || '';
        return 'QQ浏览器' + ver;
    }
    //搜狗浏览器
    if (explorer.indexOf('se 2.x') >= 0) {
        return '搜狗浏览器' + ver;
    }
    //搜狗浏览器
    if (explorer.indexOf('slbrowser') >= 0) {
        let ver = explorer.match(/slbrowser\/([\d.]+)/)[1] || '';
        return '联想浏览器' + ver;
    }
    //ie
    if (explorer.indexOf('msie') >= 0) {
        let ver = explorer.match(/msie ([\d.]+)/)[1] || '';
        return 'IE' + ver;
    }
    //firefox
    else if (explorer.indexOf('firefox') >= 0) {
        let ver = explorer.match(/firefox\/([\d.]+)/)[1] || '';
        return 'Firefox' + ver;
    }
    //Chrome
    else if (explorer.indexOf('chrome') >= 0) {
        let ver = explorer.match(/chrome\/([\d.]+)/)[1] || '';
        return 'Chrome' + ver;
    }
    //Opera
    else if (explorer.indexOf('opera') >= 0) {
        let ver = explorer.match(/opera.([\d.]+)/)[1] || '';
        return 'Opera' + ver;
    }
    //Safari
    else if (explorer.indexOf('safari') >= 0) {
        let ver = explorer.match(/version\/([\d.]+)/)[1] || '';
        return 'Safari' + ver;
    }
    if (explorer.indexOf('edge') >= 0) {
        let ver = explorer.match(/edge\/([\d.]+)/)[1] || '';
        return 'edge' + ver;
    }
    return '未知浏览器';
}

编程 - 前端
问题 JavaScript

判断是否为移动设备

2021-04-27 09:28:58 - 2025-07-06 00:13:02
無慕 - 775 - 3秒 - 1.70K
function isMobile() {
    if (navigator.userAgent.match(/Android/i)
        || navigator.userAgent.match(/webOS/i)
        || navigator.userAgent.match(/iPhone/i)
        || navigator.userAgent.match(/iPad/i)
        || navigator.userAgent.match(/iPod/i)
        || navigator.userAgent.match(/BlackBerry/i)
        || navigator.userAgent.match(/Windows Phone/i)
    ) return true;
    return false;
}

编程 - 前端
问题 JavaScript

分页(或者添加新元素)后,jQuery不执行。

2021-04-27 09:28:33 - 2025-07-06 00:13:02
無慕 - 261 - 3秒 - 1.78K

出现原因:页面上通过jQuery或其他方式添加某些新元素,而新元素无法和页面第一次加载的事件进行绑定。

例如:对button添加一个点击事件,当通过jQuery添加一个新的button元素时,就可能无法触发这个事件。

delegate() 方法的事件可以处理当前或者未来元素(比如有脚本创建建的新元素)

$(document).delegate("[id='support']","click",function(){
  alert('点击成功~');
});

编程 - 前端
jQuery 问题

MySQL模糊搜索按照匹配度进行排序

2021-02-20 16:20:23 - 2025-07-06 00:13:02
無慕 - 1.13K - 6秒 - 1.84K

在一些类似于文章博客的内容中,会用到模糊搜索检索多个字段,对于检索后的结果排序可能并不满意。

例如:

在CSDN搜索一篇博文,在输入关键字后会检索文章的标题,内容,分类,标签等内容,但是检索的排序结果可能不太理想,比如想优先显示标题中带有此关键字的文章,不管是按主键或者时间排序都是不行的。

下面我就简单的说明一下遇到这种问题的几种解决办法:

  • 利用LOCATE函数(MySQL数据库),按照匹配度进行排序。

    locate(subStr,string) 函数返回subStr在string中出现的位置,返回结果大于0代表着subStr出现的位置(从开始就存在则为1,即如果string中存在subStr最小值为1),如果等于0则说明subStr不存在。

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据:

SELECT `name`,`memo`,locate('shx',`name`) as `order_name` FROM `cs_user`
where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据,如果`name`字段中'shx'信息出现的位置相同或者都不存在,即`order_name`为0时,则优先显示`memo`字段中存在'shx'信息并且出现位置靠前的数据:

SELECT `name`,`memo`,locate('shx',`name`) as `order_name`,locate('shx',`memo`) as `order_memo`  
FROM `cs_user`where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc,`order_memo` desc

  • 等待更新

编程 - 数据库
问题 笔记 MySQL 数据库
12
鲁ICP备2023049263号-1
© 2020 – 至今 闲暇时光
由 PHP MySQL 开发而成 | 主题 - Yun
upyun