# 服务端开发
框架的后台api都是通过SatRDA的JS脚本实现的,JS脚本代码在路径 server/plugins/erp 中。
推荐把 server/plugins/erp 导入VSCode
中,方便进行修改和调试。
导入后如图:
# 调试代码
- 安装NodeJS 如已安装nodejs可以忽略。
安装nodejs, 可以 https://nodejs.org/en 下载安装
在
VSCode
命令行窗口中输入npm install
安装依赖包。在
VSCode
最左边找到运行和调试
工具栏,点击切换到调试界面。点击左上方
开始调试
按钮启动调试。
调试界面:
如果satrda
服务启动了,可以看到连接成功。
- 在相应的API代码处添加断点,前端调用API时,会执行到该断点。可以进行单步调试。
# 后台WebAPI实现
框架后台API通过SatRDA的JS脚本代码实现。
打开 app.js 主要代码如下:
let app = {
captchaImage(ctx,r,w) {
let captcha = satrda.Captcha;
let data = captcha.create({type:"string",height:40,width:120})
w.write(data);
},
login(ctx,r,w) {
const data = r.jsonBody;
const {
username,
password,
code,
uuid
} = data;
//校验成功
if (satrda.Captcha.verify(uuid,code.toLowerCase())) {
} else {
w.write({code:500,msg:"校验失败"})
return;
}
const db = getDB();
const userid = db.queryLong(`select user_id from sys_user where user_name = '${username}' and password = '${password}'`);
if (userid === undefined) {
w.write({code:500,msg:"登录失败"})
return;
}
const session = ctx.sessionStart();
session.set('user',username);
session.set('userId',userid);
const token = session.id();
w.write({code:0,token,msg:"操作成功"})
},
getInfo(ctx,r,w) {
const session = ctx.getSession();
const userId = session.get('userId');
const userName = session.get('user');
const user = {userId,userName,avatar:''};
let roles = Array.from(permissionService.getRolePermission(user));
let permissions = Array.from(permissionService.getMenuPermission(user));
w.write({"msg":"操作成功","code":200,user,permissions,roles});
},
getRouters(ctx,r,w) {
const session = ctx.getSession();
const userId = session.get('userId');
let list = menuService.selectMenuTreeByUserId(userId);
let routers = buildMenus(list);
w.write({code:200,msg:'操作成功',data:routers});
},
logout(ctx,r,w) {
let data = {msg:"操作成功",code:200};
w.write(data);
},
testdb(ctx,r,w) {
let db = getDB();
let value = db.syntaxFromSQL('select id,name, 1 as col1 from test1');
let ds = new DataStore();
ds.setTransObject(db);
ds.dataObject = value;
ds.retrieve();
ds.setItem(1,"name","jsname1");
ds.update();
w.write({count:ds.rowCount()});
console.log(ds.rowCount());
}
}
//将app对象加入到路由中,不同的请求会进入到app中的同名方法,如app中有方法login,则请求api
// http://127.0.0.1:5555/erp/login 时会进入到该方法
satrda.Router.all("/erp",app);
其中 satrda.Router.all("/erp",app) 表示将/erp开头的api注册到app对象中,注册后app中的方法会映射为webapi。如getRouters方法的webapi地址为/erp/getRouters,该方法提供了自定义的框架菜单。 app对象中还有一些方法,captchaImage 提供了验证码功能,login提供了用户登录验证。
# 发布脚本
参考 JS插件发布