JS中常见的几种错误
1.1、SyntaxError(语法错误)解析代码时发生的语法错误var 1a; //Uncaught SyntaxError: Invalid or unexpected token 变量名错误console.log 'hello'); //Uncaught SyntaxError: Unexpected string 缺少括号1.2、ReferenceError(引用错误)console.log(a); //Uncaught ReferenceError: a is not defined 引用了一个不存在的变量console.log()= 1; //Uncaught ReferenceError: Invalid left-hand side in assignment 将变量赋值给一个无法被赋值的对象1.3、RangeError(范围错误)var a = new Array(-1); //Uncaught RangeError: Invalid array length 超出有效范围1.4、TypeError(类型错误)变量或参数不是预期类型,比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。var a = new 123; //Uncaught TypeError: 123 is not a function调用对象不存在的方法var a;a.aa(); //Uncaught TypeError: Cannot read property 'aa' of undefined1.5、URLError(URL错误)与url相关函数参数不正确,主要是encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。decodeURI('%2') //Uncaught URIError: URI malformed1.6、EvalError(eval错误)eval函数没有被正确执行2、手动抛出错误以上这6种派生错误,连同原始的Error对象,都是构造函数。开发者可以使用它们,人为生成错误对象的实例。throw new Error("出错了!"); throw new RangeError("出错了,变量超出有效范围!"); throw new TypeError("出错了,变量类型无效!");上面代码表示新建错误对象的实例,实质就是手动抛出错误。可以看到,错误对象的构造函数接受一个参数,代表错误提示信息(message)。
查看详情点赞评论收藏浏览832023-02-28 10:19:11最近火爆全网的chatGPT,到底是什么?
近日,OpenAI发布的新聊天机器人模型ChatGPT受到了热烈的关注。它能够模拟人类的语言行为,与用户进行自然交互,并且拥有多样的功能,能舞文弄墨、编写代码甚至几乎无所不能,由于该测试目前免费,上线仅5天用户数量就已突破100万,上线两个月,ChatGPT 用户就达到了 1 亿。ChatGPT的出现引发了人们对AI取代人工、AI打败人类等话题的担忧,它有着巨大的商业空间。 ChatGPT是是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,不仅上知天文下知地理,知识渊博,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,但ChatGPT不单是聊天机器人的简单,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。同时也引起无数网友沉迷与ChatGPT聊天,成为大家讨论的火爆话题。 ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。让马斯克为之动容暗叹“CHATGPT 好得吓人,我们离强大到危险的人工智能不远了”。 由于ChatGPT太“聪明”,引起无粉网友沉迷与它进行聊天,有人让它帮忙改作业,有人让它扮演虚拟女友、有人让它编写请假理由、有人用它来补习外语,更有人把ChatGPT陪自己演戏。无论是生成小说、疑难解答或者是哲学的问题,ChatGPT都交上几乎完美的答案,令人惊叹不已。ChatGPT 的主要功能:编写和调试计算机程序。创作音乐、电视剧和故事。写学生作文。回答测试题。写诗和歌词。模拟 Linux 系统。聊天对话。玩游戏。......网址:https://openai.com/blog/chatgpt据了解,Chat GPT回答问题和编写代码的水平比人类还高。ChatGPT的能力简直可用“吓人”二字来形容,仿佛只要有它在,人类世界中各种难题都能迎刃而解,真真切切为咱们生活的各方各面提供了无数便利,这也是其迅速大火的原因。
查看详情点赞评论收藏浏览852023-02-28 09:35:43laravel+layui后台文件上传到本地
上传图片PHP控制器//文件上传 public function upload(Request $request) { //上传文件最大大小,单位M $maxSize = 1; //支持的上传图片类型 $allowed_extensions = ["png", "jpg", "gif"]; //返回信息json $data = ['code'=>1, 'msg'=>'上传失败', 'data'=>'']; $file = $request->file('file'); $filename = $request->all('filename')['filename']; //检查文件是否上传完成 if ($file->isValid()){ //检测图片类型 $ext = $file->getClientOriginalExtension(); if (!in_array(strtolower($ext),$allowed_extensions)){ $data['msg'] = "请上传".implode(",",$allowed_extensions)."格式的图片"; return response()->json($data); } //检测图片大小 if ($file->getSize() > $maxSize*1024*1024){ $data['msg'] = "图片大小限制".$maxSize."M"; return response()->json($data); } }else{ $data['msg'] = $file->getErrorMessage(); return response()->json($data); } $year = date('Y'); $date = date('m-d'); $newFile = md5(uniqid()).".".$file->getClientOriginalExtension(); $disk = Storage::disk('uploads'); $res = $disk->put('/'.$filename.'/'.$year.'/'.$date.'/'.$newFile,file_get_contents($file->getRealPath())); if($res){ $data = [ 'code' => 0, 'msg' => '上传成功', 'data' => $newFile, 'url' => '/uploads/'.$filename.'/'.$year.'/'.$date.'/'.$newFile, ]; }else{ $data['data'] = $file->getErrorMessage(); } return response()->json($data); }js://普通图片上传 $(".uploadPic").each(function (index,elem) { upload.render({ elem: $(elem) ,url: '{{ route("api.upload") }}' ,multiple: false ,data:{"_token":"{{ csrf_token() }}","filename":'links'} ,done: function(res){ //如果上传失败 if(res.code == 0){ var _li = $(elem).parent('.layui-upload').find('.layui-upload-box .li_thumb_'+index+''); _li.show(); layer.msg(res.msg,{icon:1}); _li.html('<div><img title="点击删除" src="'+res.url+'" /></div><p>上传成功</p>'); $(elem).parent('.layui-upload').find('.thumb_'+index+'').val(res.url); }else { layer.msg(res.msg,{icon:2}); } } }); });html:<div class="layui-form-item"> <label for="" class="layui-form-label">缩略图</label> <div class="layui-input-block"> <div class="layui-upload"> <button type="button" class="layui-btn layui-btn-sm uploadPic"><i class="layui-icon"></i>图片上传</button> <div class="layui-upload-list" > <ul class="layui-upload-box layui-clear"> <li class="li_thumb_0" id="thumb_0" style="@if(isset($links->thumb)) display: block; @else display: none; @endif"><div><img title="点击删除" src="{{$links->thumb??old('thumb')}}" /></div><p>上传成功</p></li> </ul> <input type="hidden" name="thumb" class="layui-upload-input thumb_0" value="{{$links->thumb??old('thumb')}}"> </div> </div> </div> </div>
查看详情点赞评论收藏浏览282023-02-27 19:48:46linux 安装node环境
linux 安装前端环境:安装node1、去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过 uname -a 命令查看到我的Linux系统位数是64位(备注:x86_64表示64位系统, i686 i386表示32位系统)2、上传进去服务器1)上传服务器可以是自己任意路径,目前我的放置路径为 cd /app/software/2)解压上传(解压后的文件我这边将名字改为了nodejs,这个地方自己随意,只要在建立软连接的时候写正确就可以) ① tar -xvf node-v6.10.0-linux-x64.tar.xz ② mv node-v6.10.0-linux-x64 nodejs ③确认一下nodejs下bin目录是否有node 和npm文件,如果有执行软连接,如果没有重新下载执行上边步骤;cd /etcvi profile 最后加两行export NODEJS_HOME=/www/server/nodejs/node-v14.15.1-linux-x64export PATH=$PATH:$NODEJS_HOME/bin立即生效source /etc/profile[root@localhost ~]# node -v v12.18.1上面可以就不用下面3)建立软连接,变为全局 ①ln -s /app/software/nodejs/bin/npm /usr/local/bin/ ②ln -s /app/software/nodejs/bin/node /usr/local/bin/4)最后一步检验nodejs是否已变为全局 在Linux命令行node -v 命令会显示nodejs版本,如图所示为大功告成安装yarnnpm install -g yarn安装VUE CLI3 脚手架npm install -g @vue/clivue --versionvue ui 或者 npm run serve//设置淘宝源npm config set registry https://registry.npm.taobao.org//设置公司的源(dgg)npm config set registry https://xxx.xxx.cn///查看源,可以看到设置过的所有的源npm config get registry资源线前端启动(服务不会停):/www/wwwroot/ziyuanxian.shupian.com.cn/webnohup npm run serve > ./nodezyx.log 2>&1 &切换用户:su rootsu www
查看详情点赞评论收藏浏览792023-02-27 19:31:15linux 常用命令
nmcli dev status 查看设备状态包括我网卡nmcli con up ens33 查看网卡 cd /etc/sysconfig/network-scripts/ 切换网络配置(这里是网络配置文件)systemctl start network 或service network restart #重启网络服务没有ifconfig命令需要安装,执行yum install net-tools -yTYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s10 UUID=066c9671-2047-483a-8bf8-6660299e3eae DEVICE=enp0s10 ONBOOT=yes IPADDR=192.168.56.102 GATWAY=172.16.0.1 DNS1=61.139.2.69yum 安装阿里云镜像软件,下载好软件,并配置好环境vi i esc :wq 打开文件,编辑,退出编辑,保存退出yum install vim 可以安装vim yum remove vim 不要可以yum卸载 grep: 查找 第一个命令可以享用到第二个命令中ps:可以查询出我们系统运行的进程,可以与grep 配合使用ps -aux | grep .... kill -9 pid 杀死一个进程 -9是强制杀死 kill pidchown 更改目录的用户及用户组 chmod 修改文件的权限,推荐直接一点777 chown -R root:root xxx/ chmod -R 755 xxx有一个需求。每天4点定时备份数据库:1、备份数据库的方方式:# mysqldump -u root -p test > /www/test.sqlmysqldump -uroot -p123456 test > /www/test.sql可以把用户或密码写一起,只是会发出一个警告-uroot -p123456shell脚本:echo 是输出,同事也可以帮助liunx运行需要的命令vi mysql_dump.shchmod +x ./mysql_dump.sh./mysql_dump.sh #运行这个文件,这个文件里写了上面的命令就会执行然后定时:会用到定时器。linux定时器只能精确到分钟 crontab -e #编辑定时器* * * * * 第一个星:每分钟0-59,2个:每小时0-23,第三个是小时及天* * * * * 每隔一分支用cat /etc/crontab #查看这个下面的定时器crontab -e1 * * * * /www/mysql_dump.sh查找文件:有时候忘记文件在那里可以查询:find / -name mysql_dump.sh 或者 find / -name mysql_dump*打包文件:打包成什么文件格式 被打包文件夹tar -czvf myetc.tar.gz etc解压:tar -zxvf 文件 卸载:yum remove libziplinux安装pip:下载文件 wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装 python get-pip.py复制:cp 111.txt ./111bak.txt上传下载:安装 yum install -y lrzsz sz:下载保存 rz:上传文件删除文件:rm -f 强制删除:rm -rf查看端口:netstat -anp | grep 端口 netstat -nultp //不加端口,列出被占服务端口1:查看防火状态systemctl status firewalld service iptables status2:暂时关闭防火墙systemctl stop firewalld service iptables stop或者:#查看防火墙状态 systemctl status firewalld # 开启 sudo service firewalld start # 重启 sudo service firewalld restart # 关闭 sudo service firewalld stop查看监听端口:netstat -anp | grep 9501 然后杀死: kill pid kill -9 pid //强制杀死PHP 停止重启pkill php-fpm //停止 /www/server/php/74/sbin/php-fpm //启动PHP service php-fpm restart //重启MySQL 停止重启service mysqld status //查看MySQL启动状态 service mysqld stop 或者 /etc/init.d/mysqld stop //停止MySQL service mysqld start 或者 /etc/init.d/mysqld start //启动MySQL service mysqld restart 或者 /etc/init.d/mysqld restart //重启MySQLNginx 停止重启ps -ef | grep nginx //查看是否启动 /www/server/nginx/sbin/nginx -s reload //重启nginx /www/server/nginx/sbin/nginx 或者 /etc/init.d/nginx start //启动nginx /etc/init.d/nginx stop //停止nginx /etc/init.d/nginx restart //重启nginx显示行数::set nugrep '查找内容' 文件名//nginx url转发 反向代理,TP,laravel等加速location /{proxy_pass http://192.168.56.102:9000;}wdcp:nginx/www/wdlinux/nginx/sbin/nginx 这个是启动/www/wdlinux/nginx/sbin/nginx -s reload 这个是重启/www/wdlinux/nginx/sbin/nginx -t 这个是检测配置文件,如果写的不对的话会报错的,对正在运行的nginx不会影响which 命令在Linux中可以查询我们的终端命令保存在哪里which python //查询 /usr/bin/python ls -lh /usr/bin/python //查看Python这个文件大小,只是一个软连接 ls -lh /usr/bin/python2.7 //查看具体文件大小查看服务器开放了哪些端口:firewall-cmd --list-all
查看详情点赞评论收藏浏览952023-02-27 19:11:46go-zero微服务框架 api 案例
最外层可以引入://=====================================> blog api v1 <================================= import ( "api/role.api" "api/menu.api" "api/user.api" "api/upload.api" "api/member.api" "api/article.api" )user.apiinfo( author: "lxl" date: "2022-12-20" desc: "user-api" email: "1123736022@qq.com" version: "v1" ) type ( // 一个用户 UserList { Id int64 `json:"id"` //ID UserName string `json:"userName"` //用户名 Password string `json:"password"` //密码 NickName string `json:"nickName"` //昵称 Email string `json:"email"` //邮箱 Image string `json:"image"` //头像 CreateTime int64 `json:"createTime"` UpdateTime int64 `json:"updateTime"` } // 用户列表请求 UserListReq { Page int64 `json:"page"` PageSize int64 `json:"pageSize"` NickName string `json:"nickName"` Email string `json:"email"` } // 用户列表响应 UserListResp { List []UserList `json:"list"` Code int64 `json:"code"` Msg string `json:"msg"` Total int64 `json:"total"` } // 用户新增请求 AddUserReq { UserName string `json:"userName"` //用户名 Password string `json:"password"` //密码 NickName string `json:"nickName"` //昵称 Email string `json:"email"` //邮箱 Image string `json:"image"` //头像 } // 删除用户请求 delUserReq { Id int64 `json:"id"` } // 批量删除用户请求 batchDelUserReq { Ids string `json:"ids"` } // 获取用户信息响应 UserInfoReply { // UserInfo UserList `json:"user_info"` Id string `json:"id"` Name string `json:"name"` } // 用户登录请求 UserLoginReq { UserName string `json:"userName"` //用户名 Password string `json:"password"` //密码 } // 用户登录响应 UserLoginResp { Code int64 `json:"code"` Msg string `json:"msg"` } // 用户响应 UserResp { Code int64 `json:"code"` Msg string `json:"msg"` Token string `json:"token"` UserInfo GetUserResponse `json:"userInfo"` } // 获取用户信息请求 GetUserRequest { Id int64 `json:"id"` } GetUserResponse { Id int64 `json:"id"` //ID UserName string `json:"userName"` //用户名 NickName string `json:"nickName"` //昵称 Email string `json:"email"` //邮箱 Image string `json:"image"` //头像 CreateTime int64 `json:"createTime"` UpdateTime int64 `json:"updateTime"` } JwtTokenRequest { } JwtTokenResponse { AccessToken string `json:"access_token"` AccessExpire int64 `json:"access_expire"` RefreshAfter int64 `json:"refresh_after"` // 建议客户端刷新token的绝对时间 } ) @server( prefix: api group: user jwt: JwtAuth ) service blog { // 获取用户列表 @handler getUserList post /user/getUserList (UserListReq) returns (UserListResp) // 添加用户 @handler addUser post /user/addUser (AddUserReq) returns (UserResp) // 更新用户 @handler updateUser post /user/updateUser (UserList) returns (UserResp) // 删除用户用户 @handler delUser post /user/delUser (delUserReq) returns (UserResp) // 批量删除用户用户 @handler batchDelUser post /user/batchDelUser (batchDelUserReq) returns (UserResp) // 获取用户信息 @handler getUserInfo post /user/info (GetUserRequest) returns (GetUserResponse) } @server( prefix: api group: user ) service blog { @handler userLogin post /user/login (UserLoginReq) returns (UserLoginResp) @handler JwtHandler post /user/token (JwtTokenRequest) returns (JwtTokenResponse) }
查看详情点赞评论收藏浏览482023-02-27 18:57:46go-zero微服务框架 proto 案例
以文章管理为例syntax = "proto3"; package article; // protoc-gen-go 版本大于1.4.0, proto文件需要加上go_package,否则无法生成 option go_package = "./article"; message IdRequest { string id = 1; } message getArticleByArticleCodeReq { string articleCode = 1; } // 文章 message addArticleReq { string title = 1; int64 sectionId = 2; int64 columnId = 3; int64 memberId = 4; string content = 5; string picUrl = 6; int64 isAdvert = 7; string linkUrl = 8; int64 createTime = 9; int64 updateTime = 10; string articleCode = 11; } message articleResp { int64 code = 1; string msg = 2; } message getArticleListReq { int64 pageSize = 1; int64 page = 2; string title = 3; int64 memberId = 4; int64 sectionId = 5; int64 columnId = 6; int64 isChecked = 7; int64 isAdvert = 8; string column = 9; string type = 10; int64 num = 11; string articleCode = 12; } message articleList { int64 id = 1; string title = 2; string keyword = 3; string description = 4; int64 createTime = 5; int64 updateTime = 6; int64 memberId = 7; int64 sectionId = 8; int64 columnId = 9; int64 commentNum = 10; int64 likeNum = 11; int64 viewNum = 12; int64 collectionNum = 13; int64 isChecked = 14; string content = 15; int64 isAdvert = 16; string linkUrl = 17; string picUrl = 18; int64 weight = 19; int64 mid = 20; string memberCode = 21; string nickName = 22; string image = 23; string articleCode =24; } message getArticleListResp { repeated articleList articleList = 1; int64 code = 2; string msg = 3; int64 total = 4; } message getArticleDetailResp { articleList articleList = 1; int64 code = 2; string msg = 3; } // 评论 message addCommentReq { int64 articleId = 2; int64 reviewer = 3; string content = 4; int64 appraisee = 5; int64 isChecked = 6; int64 likeNum = 7; int64 createTime = 8; int64 updateTime = 9; int64 pid = 10; } message commentResp { int64 code = 1; string msg = 2; } message getCommentListReq { int64 pageSize = 1; int64 page = 2; int64 articleId = 3; int64 isChecked = 4; int64 likeNum = 5; int64 createTime = 6; int64 pid = 7; } message commentList { int64 id = 1; int64 articleId = 2; int64 reviewer = 3; string content = 4; int64 appraisee = 5; int64 isChecked = 6; int64 likeNum = 7; int64 pid = 8; int64 createTime = 9; int64 updateTime = 10; } message getCommentListResp { repeated commentList commentList = 1; int64 code = 2; string msg = 3; int64 total = 4; } service Article { // 根据文章编号获取文章 rpc getArticleByArticleCode(getArticleByArticleCodeReq) returns(getArticleDetailResp); // 添加文章 rpc addArticle(addArticleReq) returns(articleResp); // 更新文章 rpc updateArticle(articleList) returns(articleResp); // 获取文章列表 rpc getArticleList(getArticleListReq) returns(getArticleListResp); // 添加评论 rpc addComment(addCommentReq) returns(commentResp); // 更新评论 rpc updateComment(commentList) returns(commentResp); // 获取评论列表 rpc getCommentList(getCommentListReq) returns(getCommentListResp); }
查看详情点赞评论收藏浏览842023-02-27 18:20:54Git 常用命令
使用git pull或者git push每次都需要输入用户名和密码很繁琐,耽误时间,现在教大家一条命令实现保存用户名和密码不用再输入git config --global credential.helper store git pull /git push (第一次输入,后续就不用再次数据)拉项目:git clone +地址$ git clone http://172.16.0.25/SEM_CENTER/192.168.254.119.git git clone -b dev进入项目,跟cmd一样cd /dir切换分支git checkout dev上传修改的代码git add . git commit -m "备注" git push //或者 git push origin devGit 命令 & dev 分支合并到 master1. 提到devgit add -A git commit -m ‘dev' git pull git push2. 切换到本地mastergit checkout master3. 同步远程 master 代码git pull origin master //或者 git pull4. 然后将dev合并到mastergit merge dev5. 将合并完的分支push到远程仓库git push origin master // 或者 git push查看本地分支git branch查看远程分支git branch -r查看所有分支git branch -a新建本地分支git branch xxx删除本地分支git branch -d xxx讲本地创建的分支推到远程git push origin xxx删除远程的分支//删除分支 git branch -r -d origin/lxl 提交并将远程分支删除 git push origin :lxl //这个也行 git push origin --delete new_a 将本地dev分支合并到本地master分支$ git merge dev #执行合并代码,此时执行结果时将本地的dev合并到本地master分支回退//回退到上一个版本 git reset --hard HEAD^ //回退到3次提交之前 git reset --hard HEAD~3 //置顶回退到某个版本代码 git reset --hard dde8c25694f34acf8971f0782b1a676f39bf0a46 //强推到远程 git push origin HEAD --force
查看详情点赞15评论收藏浏览1162023-02-27 18:09:07pm2 部署nuxt3项目
1、静态部署//pnpm打包 pnpm run generate代码传到(或Jenkins构建)到linux服务器,用常用的Nginx静态部署就可以2、build 打包 pm2部署pnpm run build在根目录新建pm2配置文件:ecosystem.config.jsmodule.exports = { apps: [ { name: 'blog', exec_mode: 'cluster', instances: 'max', script: '.output/server/index.mjs', env: { NITRO_PORT: 3000, NITRO_HOST: '127.0.0.1', }, }, ], }启用pm2pm2 restart ecosystem.config.js pm2 save pm2 list到此结束就可以访问了。
查看详情点赞1评论收藏浏览972023-02-27 16:17:54