- 博客(339)
- 资源 (21)
- 收藏
- 关注
原创 数据库事务、乐观锁及悲观锁
在支付成功后,我们在自定义的里,依次更新了订单状态和用户信息。也就说这里先执行了更新订单表的SQL,接着又执行了更新用户表的SQL。但是大家想一想,有没有可能。订单表更新成功了,但因为某些原因导致用户表更新失败?比方说用户模型里,用户组的效验写掉了1,导致1存进不去。又或者大会员有效期计算错误,导致更新失败。这样就可能订单状态更新成已支付了,但用户却还是普通用户,或者大会员有效期没有增加,造成数据不一致。所以对于这种,连续执行多条SQL语句的操作,正确的做法是要加上事务。所谓数据库的事务。
2025-03-04 18:38:41
751
原创 解决Node (ORM) 部分种子文件中存在unique索引时 报错问题
【代码】解决Node (ORM) 部分镜像 内容字段为unique运行种子报错问题。
2025-03-03 16:27:03
146
原创 node支付宝支付及同步、异步通知、主动查询支付宝订单状态
在站点中集成支付宝,首先需要去开通。相关的流程比较繁琐,大家可以按照课程中的步骤,一点点去做好。应用公钥是传到支付宝网站上的。换来的支付宝公钥和转换了格式的-应用私钥,要保存到项目的环境变量里。支付宝支付,分为电脑网页和手机网页支付。两者显示的效果是不同的。在手机真机上支付,可以直接打开支付宝 App 进行付款。
2025-02-28 13:31:53
757
原创 express(node ORM) 使用 Winston 记录日志 及数据库保存日志
【代码】express(node ORM) 使用 Winston 记录日志 及数据库保存日志。
2025-02-25 15:05:31
369
原创 RabbitMQ 消息队列 优化发送邮件
所以,对于非常简单的功能,你确实可以不写await来达到异步的目的。但对于大型程序来说,为了有更好的性能,增加并发处理能力,提高错误处理的可靠性,使用消息队列是一个更好的选择。我要告诉大家,你想的一点也没错,这样做 100% 可以的。因为不等待异步执行的结果,如果发送邮件出现错误了,会。在实际开发之前,不妨先思考下,我们最终的目的是为了让邮件异步发送。你去访问其他接口,也是完全不受影响的。那么现在,我们就用非常简单的方式,实现了异步发送邮件了。的时候,相关的信息,就可以从环境变量读取。
2025-02-21 16:41:09
1065
原创 RabbitMQ 消息队列
但由于发送邮件,依赖于其他厂商的服务,有可能他们的接口会非常耗时。当用户注册成功了,我们就通知RabbitMQ,你去发个邮件,然后就直接提示用户注册成功。所以,生产者、消费者,都是我们要写的程序。但如果队列已经存在,那就直接使用,不会创建新的了。因为你知道,在将来的某个时候,你的信就会被寄到收件人手里。一共收到了一条信息,准备好的有几条,在内存中的又几条,占有了多少空间、多少内存什么的。将接收消息的终端重启一下,重新发送一次,可以看到收到信息了。这就错了,按道理消息被处理完成后,就不应该重复收到了。
2025-02-20 17:16:04
1223
原创 express 发送邮件
发送邮件,首先得有个发件箱。顾名思义,发件箱就是发送邮件的邮箱。大家可以用自己的 QQ 邮箱、网易 163 邮箱,由于网络原因,一些国外的邮箱,例如谷歌的Gmail等等,就不推荐使用了。上面部分是发件箱的配置,下面部分就是发送给谁,发送的内容是什么。看着不是很难,我们新建一个专门发送邮件的文件。使用阿里云的企业邮箱,这是商业项目最推荐的,因为发件箱的域名,可以和你的官网使用相同的域名。使用网易 163 邮箱,也需要获取授权码后再操作。.env.example中添加对应的说明。的官方文档里,有一个基础案例。
2025-02-19 16:39:18
567
原创 expres svg-captcha图形验证码功能
对于用户的注册、登录等敏感操作,或者是发送短信等其他消耗资源的操作上,最好加上验证码。生成验证码可以使用svg-captcha包。验证码,需要保存在Redis中,key的名字可以通过uuid生成唯一标识。生成验证码的接口,要返回captchaKey和captchaData。captchaKey是Redis中key的名字。captchaData是生成的svg图片。当用户提交验证码时,需要将接口返回的captchaKey,和用户填写的验证码内容,一起提交过来。
2025-02-19 15:29:37
393
原创 windows Redis Insight 如何查看宝塔docker里的redis数据
如果连接成功,窗口会变为空白,说明端口是开放且可访问的;如果连接失败,会显示类似 Could not open connection to the host, on port 6379: Connect failed 的错误信息,这可能意味着端口被防火墙阻止或者 Redis 服务本身存在问题。检查云服务器是否开放6379端口。telnet 公网地址 端口。
2025-02-17 16:44:25
386
原创 node 使用 Redis 缓存
如果数据发生改变了,就保存的数据删掉,重新保存最新的。的数据都存储在内存中,这样它的读写速度就非常快。而且还会将内存中的数据写入本地硬盘,可以在服务器重启后,自动将数据恢复到内存中。在数据库上我们可以做很多优化,例如优化 SQL 语句,优化索引,如果数据量大了,还可以分库、分表等等。它的功能非常强大,在我们这节课中,只会用到Redis的缓存能力。这样做好封装好后,用起来就非常简单了,而且就算是数组或对象,也可以顺利的存取了。高并发下,一个项目最先出问题的,并不是程序本身,而是数据库最先承受不住。
2025-02-17 15:09:40
874
原创 ERROR: Failed to create schema directory ‘clwy‘ (errno: 13 - Permission denied) 解决
2、若容器存在但已停止,启动容器。尝试进入容器并修改权限。1、确认容器是否存在。
2025-01-23 17:54:19
271
原创 Windows Docker Desktop安装及使用 Docker 运行 MySQL
Docker Desktop是Docker的官方桌面版,专为Mac和Windows用户设计,提供了一个简单易用的界面来管理和运行Docker容器。它集成了Docker引擎,为开发人员提供了一个快速、可靠、可扩展的方式来构建、运行和管理应用。。需要注意的是,。
2025-01-23 13:47:30
1651
原创 sequelize-cli 软删除 与多选删除、恢复 及多选批量恢复
在Sequelize里,实现软删除是非常容易的事情。数据库中要增加deletedAt字段,来记录当前文章是否被删除。模型里,要添加。现在再删除文章,就会变成软删除了。原理就是在deletedAt字段添加了个时间而已。在查的时候,我们只查deletedAt字段为空的记录。用户就以为数据被删掉了,其实并没有。要查询被软删除的记录,需要添加。从回收站恢复数据,可以用restore方法。要彻底删掉记录,可以在删除时,传递参数。还有一个值得思考的地方是,很多项目都有删除用户的功能。
2025-01-16 15:11:34
779
原创 宝塔自动备份数据库到阿里云 OSS
一步步点进去后,找到最终 SQL 文件,下载下来。解压缩后,预览一下,非常棒。完成后,去阿里云 OSS 刷新一下看看,可以看到自己的备份文件夹了。上面这些信息,在自己项目的.env文件中都有了,直接拿过来就好。EndPoint,可以去阿里云 OSS 的控制台中找到。当然,我们也不用等待凌晨 4:30 看它运行了,直接点击。,在里面将阿里云 OSS 相关数据填写进去。保存路径,我这里设定在/backup目录中。中所存储的文件,方便我们进行管理。,确定后,就能看到自己的数据库了。安装完成后,需要点击。
2025-01-15 15:15:14
977
原创 使用 Multer 上传图片到阿里云 OSS的两种方式
这样这张图片,要上传两次,会造成网络资源的浪费,增加服务器的开销。尤其是在访问量大的情况下,会对项目的稳定运行,造成很大的影响。使用这种方式,一张图片,先要上传到 Node 项目的服务器中,然后再由 Node 服务器上传到阿里云 OSS。可以看到这里的代码还是比较简单的,上面需要先做一个配置,然后调用方法就可以上传了。所以明智的选择,要用云存储,这里我们以阿里云的对象存储为例来学习如何实现上传。对应的缺点就是,在开发上,代码麻烦点。大家复制的时候,注意下,只要前面这一部分,后面的完整域名不需要。
2025-01-10 17:53:21
1344
原创 部署:使用 PM2 部署项目
域名要经过备案,并设置域名解析后,才能访问。生产环境要用PM2运行Node.js项目。PM2还有很多复杂的用法。可以在项目里生成专门的配置文件、可以用命令对PM2进行监控管理,还可以用命令实现自动化部署。这些内容就比较复杂了,大家有兴趣可以查看PM2的官方文档。我们这里为了让大家用最简单的办法部署好项目,就不演示这些了。配置好SSL证书后,站点就会从http变为https,从不安全变为安全。服务器上更新代码后,需要在宝塔的网站管理里,点击重启。一台服务器上,是可以部署多个项目的。
2025-01-09 16:32:57
964
原创 sequelize-cli 多对多关系处理 及某一单项游戏根据成绩降序排名
【代码】sequelize-cli 多对多关系处理 及某一单项游戏根据成绩降序排名。
2025-01-09 15:07:16
434
原创 部署:上传项目代码 & 配置数据库
上传代码,推荐使用Git Clone。或者用宝塔面板直接上传,但是不推荐。Linux上的npm包,有可能和Windows上不同。上传到服务器后,需要重新安装。生产环境,有自己的环境变量、秘钥和数据库配置。可以使用命令,创建生产环境的数据库、表和数据。使用MySQL客户端,也可以远程管理服务器上的数据库。
2025-01-07 17:02:10
1240
原创 使用宝塔面板,安装 Nginx、MySQL 和 Node.js
为了简化Linux的操作难度,可以安装宝塔面板。需要在安全组里,添加端口后,才能访问对应的服务。服务器上运行Node.js项目,需要安装Node.js自身、Nginx和MySQL。我们这里演示的是阿里云,但不同厂商的配置会有一些区别。
2025-01-07 14:43:01
1366
原创 使用ssh远程链接服务器(阿里云 linux下)
如果我们服务器很多,每次使用SSH连接到服务器,都要去找 IP 地址,这样就非常麻烦了。可以看到服务器上的Linux,是没有桌面的。hk,是我自己取的名字,因为服务器在香港,所以就叫这个了。但是因为要收费,这里就不介绍了,大家可以自己尝试一下。打开密钥对存放目录后,在里面新建一个config文件,注意这个文件没有扩展名。等待服务器重启完成,现在再试试 SSH 连接,发现不需要输入密码了。新服务器买好后,要干的第一件事,就是更新系统上的软件包。服务器为了防止入侵,应当禁用密码登录,改为密钥登录。
2025-01-07 14:03:49
1799
原创 Sequelize ORM 现有表如何使用
明显也不符合默认关联字段的命名。没有关系,定义一个一对多关联,只需要用foreignKey定义一下,关联的字段叫什么名字就可以了。到这里为止,模型就全部改造完成了。我们添加个路由测试下,新建routes/posts.js。已经有了一张叫做xw_posts的表。表里的字段非常简单,大家可以自己建一下。我们的Post模型,它与是属于分类的。而且里面还缺少createdAt和updatedAt时间字段。里面关联分类表的字段是下划线命名,也不符合命名规范。这张表的命名显然是不符合Sequelize规范的。
2024-12-24 16:55:53
320
原创 sequelize-cli 封装登录接口
第三步:因为用户既可以用账号登录,也可以用邮箱登录。可以接收一个自定义的东西,就叫做login,无论发送的是邮箱还是账号,都用login来接受。我们可以自己在路由里写点判断,确定用户提交了邮箱、账号和密码,而且不为空。就要用一个叫做jwt的包,来生成token,也就是令牌。第四步:用接收到的这个login,来查询数据库,判断当前用户是否存在。无论是查询邮箱,还是查询账号,只要查到那就是存在。第六步:就算账号和密码都对得上,还要验证当前用户是不是管理员。第五步:如果找到当前用户了,再来比对密码是否正确。
2024-12-19 17:48:39
362
原创 sequelize-cli 关联表的使用
官网三个表:category 分类表 course课程表 user表在course.js中定义关联模型关联中引用的字段必须具有唯一性约束// 自定义外键})// 默认外键为userId在路由中使用attributes是用来指定从数据库表对应的模型中选取哪些字段(属性)出现在查询结果里的配置项exclude从查询结果中排除的字段include用于处理模型之间的关联关系查询model关联的模型as别名attributes同上述},}, {}],
2024-12-17 15:10:05
212
原创 node ORM (sequelize)使用、查询、验证及express 基础框架的搭建及实例的使用
timezone: ‘+08:00’ 这里是东八区,默认为0时区。sequelize model:generate:生成模型及其迁移。pool: { 使用连接池。bulkInsert(“表名”, 数据, {配置参数});dialect:这里可以改成任意一种关系型数据库。development:本地环境。username: 数据库用户名。production:线上环境。attributes:字段设置。password:数据库密码。database:数据库名。
2024-12-11 16:47:46
851
原创 mycat2读写分离配置
replicas:[“rwSepr”] 存放送机 (读的数据源)可以是多个 数组类型。masters:[“rwSepw”] 存放主机(写的数据源)可以是多个 数组类型。name: #rwSepw 默认最后一位区分读写 w r。url mysql的ip地址及真实mysql库名。name: prototype 集群名称。也可以不用注解的方式添加 自己手动添加。写入成功后 会多出相应的配置文件。targetName的参数。password 密码。写数据源 默认是主机。读数据源 默认是从机。
2024-12-09 15:43:40
413
原创 centos8 mycat 2.0安装及使用
安装可以通过绑定的资源下载也可以通过官网下载mycat2如果在windows下载 需传入centos8D:\BaiduNetdiskDownload\mycat2.zip 需要传入的文件目录root@192.168.245.132:/Admin/root 虚拟机账号名192.168.245.132 虚拟机iip地址/Admin/ 存放地址scp D:\BaiduNetdiskDownload\mycat2.zip root@192.168.245.132:/root/解
2024-12-04 16:05:03
401
原创 centos8 mysql 主从复制
1、修改配置文件 /etc/my.cnf2.重启MySQL服务器3、登录mysql,创建远程连接的账号,并授予主从复制权限hostname服务器名4、为’hostname’@‘%’ 用户分配主从复制权限5、通过指令,查看二进制日志坐标字段含义说明:file:从哪个日志文件开始推送日志文件position:从哪个位置开始推送日志binlog ignore db:指定不需要同步的数据库。
2024-12-04 15:09:43
465
原创 express 从0-1如何创建一个项目 (注册登录接口)
目的:为了保证 路由模块 的纯粹性,所有的 路由处理函数 ,必须抽离到对应的 路由处理函数模块 中。2.在项目根目录中,新建 router_handler 文件夹,用来存放所有的 路由处理函数模块。目的:为了保证 路由模块 的纯粹性,所有的 校验函数 ,必须抽离到对应的 校验处理函数模块 中。1.在项目根目录中,新建 router 文件夹,用来存放所有的 路由 模块。路由模块中,只存放客户端的请求与处理函数之间的映射关系。路由处理函数模块中,专门负责存放每个路由对应的处理函数。1、对用户数据进行校验。
2024-11-15 13:09:21
1191
node ORM (sequelize)使用、查询、验证 及express 基础框架的搭建及实例的使用
2024-12-12
贴图工具贴图工具zip
2024-03-27
自用css样式自用css样式自用css样式自用css样式自用css样式自用css样式
2020-09-25
vue3项目 定时器获取实时时间 检测到dom节点实时增加
2023-05-08
关于#微信小程序#的问题,如何解决?
2023-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人