文件夹结构:
- dao访问数据库的DAO层
- node_modules nodejs第三方模块
- srv后端服务层
- util工具
- web前端网页层
- config.js配置文件,配置端口号,日志路径等
- jdbc.js数据库连接配置
登录示例:
- 其中 h:apply="./Login"为自定义属性, 代表此html受到 ./Login.coffee文件的控制
- 点击登录按钮之后, 调用 ./Login.coffee文件中 commitClk方法
- commitClk方法再通过 rss = await o.thisSrv.ajax “login”,[eny.code,eny.password,eny.lang]调用后台 srv服务层 srv/usr/LoginSrv.coffee的 login方法, 传入参数为 eny.code,eny.password,eny.lang ,返回对象为rss
- 后台服务层srv/usr/LoginSrv.coffee已经定义好 login方法
- login方法将会接收到前端的参数 (reqOpt,code,password,lang)用户名,密码,语言
- 其中 reqOpt为服务层所有函数固定的参数,用于串联整个请求过程
- 其中 “@login”:{isTran:true,notSid:true}中 isTran代表此方法是否启用数据库事务, 若启用事务, 方法执行前,会开启事务, 执行完毕后,会自动提交事务, 执行过程中若报错,则自动回滚事务, (声明式事务)
- notSid代表此方法不判断用户是否已经登录的检查, 是否检查会话ID, 本身就是用来登录的方法, 必然也不需要检查会话ID是否存在
- 最后 rvObj对象返回给前端, 告诉前端是否登录成功, 也就是前端收到的 rss
核心理念是, 前端可以直接调用后端的方法,传递参数,返回对象, 而无需知道内部的通信过程
(未完待续…也不一定会再续…)