关于nodejs单页企业应用框架的思考
文件夹结构:
- 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
核心理念是, 前端可以直接调用后端的方法,传递参数,返回对象, 而无需知道内部的通信过程
(未完待续…也不一定会再续…)