自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 十一、通用控制器,Response中间件及错误日志

作为服务端,程序的稳健是非常重要的事情。我们的UserController已经实现了对user表的增删改查,实际的系统不可能只有一个表,如果按照UserController控制器的这种思路,那么一个表就需要一个控制器,并且不同的控制器功能大致相同,这种设计显然是不合理的。这几个控制器将会是未来前端使用比较多的,一个好的软件项目,应该要有完善的文档,我们用Swagger,必须清楚的描述所有这几个控制器的使用说明,调用的Request body示例,以及其他注意事项,因此我们需要新建一个Swagger。

2023-01-28 11:59:54 387

原创 三、以user表为例,用Amis+Sails实现增删改查操作

"footerToolbar" : [ "statistics" , //显示统计数据,比如1/3 总共:22 项 "switch-per-page" , //可以切换perPage值(设置pageSize) "pagination" //分页组件 ] ,保存后,界面就有可以设置分页大小的按钮了。"type" : "tpl" , "tpl" : "一共有 ${count} 行数据。

2023-01-15 16:29:56 3433 2

原创 二、连接Sails后端实现登录

我们在前端只是修改了service/api.ts里面一个login的请求,其他的请求没有动,那那些请求必然是没有在header里面增加token的,没有token的访问在sails端被禁止了,所以当然是会返回403了。这样本地保存的token和写在请求头里面的token是不一样的,这样可以增加一点安全系数。至此,我们成功的实现了和Sails后端的通讯,实现真正的通过数据库对前端输入的用户email和密码进行验证的登录过程,并且登录成功之后,可以查询当前登录用户信息,以及对敏感api的Jwt保护性的访问。

2023-01-14 20:41:27 713

原创 一、Ant Design Pro 与 Amis 结合

而我们前面对菜单的改造是希望我们可以访问本地的json文件,这样我们就需要把这两种访问方式区分开来,并且amis的schema文档内部也有需要访问后端api的时候,为此我们需要简单的封装一下umi 的request。2、加载菜单文件的时候,应该考虑当前用户选择的语言,然后根据用户当前的语言来加载不同的菜单文件,为了实现此功能,我们的函数参数应该直接修改成用户当前的语言,然后我们本地文档名称也应该直接用用户locale的key作为文件名。它最大的优势是,不需要代码就可以实现许多我们需要实现的功能。

2023-01-08 10:17:23 3739 1

原创 零、Ant Design Pro 开始

第一次采用ProLayout的时候也担心会不会不够灵活,比如我需要修改折叠按钮(collapsed)的位置能不能实现,带着这种猜疑,我进入官网,我的担心立刻解除,他们竟然直接就有了类似的demo: (可以进入以下网址,查看具体示例代码)https://procomponents.ant.design/components/layout#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84-collapsed。

2023-01-01 17:13:55 2233 4

原创 十、Update 存储过程

对于修改数据,我们需要做一个存储过程,要求如下:在修改的存储过程中,执行修改的时候发现已经被其他用户修改过了,或者是锁表的时候失败,我们可以选择的做法有两种:两种方式都可以达到目的。但是如果正常返回,我们在程序端使用事务同时执行多条SQL语句的时候,因为返回的时候数据库状态是正常的,promise编程就不能捕捉到异常,也因此不能及时回滚数据,这样就会导致我们不想要的结果。因为上述修改数据要求里面,如果有不满足要求的情况,我们都希望后面的操作应该及时停止,已经修改的部分操作应该回滚。因此,对于不想要修改的情

2022-12-24 11:26:43 1511

原创 九、Waterline的删除和SQL事务

令人遗憾的是,Waterline 里面并没有很好的实现对事务操作的支持,假如我们需要回滚,Waterline里面并没有明确的回滚语句,并且默认的数据库连接connection配置是把一次连接发送多条语句的开关关闭掉的,这样我们不能在同一个连接里面做回滚操作。这就要求删除数据的时候,要执行软删除(逻辑删除,物理不删除)。字段标记:设置一个布尔类型的字段 IsDelete,该字段默认默认为false,要删除的时候把记录的IsDelete 改写为true,这种做法实际上是修改数据的做法。

2022-12-16 09:00:16 159

原创 八、使用存储过程模拟Waterline的查询

env文件夹里面的文件名称和Nodejs的环境变量NODE_ENV同名,当Sails启动的时候,系统根据启动时的NODE_ENV名称加载env里面的配置文件,比如环境变量是production的时候,就加载config/env/production.js,加载后这个配置文件里面有设置的内容会覆盖model文件夹里面对应内容。如果当前的NODE_ENV名称在config/env文件夹里面找不到对应的文件名称,Sails的配置项就不会被修改,所有配置项的设置值为config里面每个.js文件的内容。

2022-12-10 19:51:55 163

原创 七、深入理解Waterline的多段查询(Query)

forgeStageTwoQuery 具体文件是waterline库的 utils/query/private/forgeStageTwoQuery.js,在waterline是私有函数,并没有直接被export出来,我们自然是可以修改waterline库的源代码,但是一旦修改依赖库的源代码,除非我们提交给源代码管理方并成功合并我们的request,否则日后依赖库升级了,我们就可能会因为我们的分叉而无法升级依赖库的新功能。不论是哪种查询函数,都需要指定查询条件,相当于SQL语句里面的Where。

2022-12-10 19:49:45 236

原创 六、Sails中执行存储过程模拟Waterline的Create插入数据

插入新数据是比较单纯而且简单的功能。在存储过程中可以通过拼接insert语句来实现。如果需要插入多条语句,insert后面的values可以增加有多个数据,这种操作的效率还是比较高的。拼接insert语句,我们需要tableName,字段名称,字段值以及插入后是否返回已经插入的数据的开关变量fetch,在代码和数据库之间传递值或是字段名称,可以通过上一篇博文里面说到的转义操作来实现对关键词的保护,代码在传递参数给数据库的过程中要传递的内容再加上“”(双引号)可以一定程度防止sql注入攻击。参数部分代码如下:

2022-12-04 14:26:03 400

原创 五、解读Sails之Waterline源代码

因为工作需要调用存储过程来实现对数据库的操作。为此我们需要更加深入的了解Sails是怎么发送Sql指令以及发送了什么样的Sql指令。在Sails里面执行数据库操作的是Waterline(ORM),前面我们使用Sails的config/datastores做数据库配置的时候,需要先安装一个叫sails-mysql数据库适配器。这个数据库适配器也是开源项目https://github.com/balderdashy/sails-mysql,进入该项目的github可以看到它的依赖库里面是这样的:也就是它操作m

2022-12-03 16:43:27 561

原创 四、Sails项目的Api文档——集成Swagger解决方案

Swagger是一套基于OpenAPI规范构建的开源工具,它是一种规范,你只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成客户端和服务端的代码,以及在线接口调试页面等等。在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。为了能更感性直观的理解Swagger,请大家前往归纳一下,大约有以下几点。

2022-11-25 20:05:58 603

原创 三、Sails 中使用Jwt进行身份认证

由于我们是完全前后端分离的开发模式,我们的后端对前端提供Api,这个时候Api就会暴露出来,有些Api是包含敏感信息的。出于安全考虑的设计,肯定不允许任何人都可以访问这样的Api,这个时候就需要对Api的请求(request)进行身份认证(Authorization)。这种情况我们可以采用Jwt(Json Web Token)来完成这个事情。

2022-11-24 17:47:23 671

原创 二、 在Sails中使用Typescript

要达到真正对后面的编程有强类型约束,我们需要做两个事情,一个是把sails里面的waterline(ORM)这部分消化掉,并且写成相关联的typing(.d.ts)。一个是要把api的请求(request)和响应(response)消化掉,写出相应的interface为了规划整个App的文件结构,我们在根目录下面新建一个typing文件夹,用来存放这个App所需要的类型定义。

2022-11-18 14:59:52 1173 1

原创 一、Sails基础操作

sails是可以做全站混合开发的。使用Navicat之类第三方工具,打开mysql查看我们的admindata数据库,发现里面处理user表,还有一个archive,这个是sails自动生成的归档表。因为我们的设计模式是前后端分离,我们的前后端是两个独立站,出于浏览器的同源策略限制(同源策略会阻止一个域的JavaScript脚本和另一个域的内容进行交互)。为了更好的做数据库调试,如果是单人开发,可以自己安装MySql,如果是多人开发,可以考虑把MySql安装到云服务器,大家共同访问云服务器中的数据库。

2022-11-17 17:38:40 941 2

原创 零、从Github开始

github基本用法,ssh-keygen和git clonegithub团队合作模式,fork pull request

2022-11-16 16:32:42 232 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除