同步操作将从 Asciphx/ThinkTs 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
@Class(["add","del","fix","info"])//or @Class("/admin",……)or @Class("admin",……)
class AdminController extends Controller{
@Inject(AdminService) readonly adminSvc:AdminService
@Inject(UserService) readonly userSvc:AdminService
@Middle(W.Log,W.V_B("pwd#6~23|1","account|1#3~10"))
@Post("login")
async login(@B body) {
return await this.userSvc.login(body.account,body.pwd)
}
}
/** Here's how to show EJS template rendering */
class View{
@Get()
@Get("index.html")
async index(ctx:Context){
await html(ctx,{test:"test",author:"asciphx"})
}
@Get("login.html")
async login(ctx:Context){
await html(ctx,{test:"test",author:"Login"})
}
}
export class UserService extends Service implements UserFace{
constructor(
private user:Repository<User>=Cache[User.name],
private role:Repository<Role>=Cache[Role.name]
) {
super({
leftJoin:{e:"user.roles",a:'role'},
select:[ 'user.id','user.account', 'role.id','role.name', 'user.photo', 'user.status'],
where: query => {
return new Brackets(qb => {
if (query.account) qb.where('account like :v', { v: `%${query.account}%` })
if (query.id) qb.andWhere('id >:i', { i: query.id })
});
},
orderBy: { "user.id": "desc" }
})
}
}
export interface UserFace{
/** register one*/register(entity)
/** login one*/login(entity)
/** search all*/all()
}
Headers请求头现在为2个参数,原版jwt不变。现增加一个secret,算法是在cryptoUtil.ts里并由后端额外提供动态secret,此项目只是个高度安全的案例,只要后端代码加强算法并不泄露,就难破解。
a:`${token}` s:`${secret}`特别地,localhost:8080/index.html是Postman界面,记住登陆后记录token和sercet,并像上面使用即可。前端目前还在实现中,先暂给大家用Postman尝鲜。 在正式环境下启动的指令,windows使用的是
npm run pro
,而Mac或者Linux是npm run prod
.因本人用win10,暂npm run pm2
不支持linux或者Mac 新增redis,为了每个线程上的服务可以同步缓存,每个线程服务的每一个menu上的path路径的同步间隔目前为15秒,redis密码在config配置,默认6543210
后端文件入口
控制层
实体层
接口层
服务层
基础层
工具层
后台ejs模板渲染文件夹
输出查看的路由文件,每个controller会创建一个
windows用到linux的rm与cp指令程序,需放环境变量目录
PATH路径,自动生成的(匹配规则)
增加:POST/admin
删除:DELETE/admin/
修改:PUT/admin/
查询:GET/admin/
分页:GET/admin
菜单只包含目录结构,没有请求路径。 路由的上级节点只能是菜单,包含请求路径。
按钮的上级节点只能是路由,而且必须没有请求路径,是因为按钮的功能都基于spa单页应用。
put方法实际上跟patch方法等同,如果局部修改也不会影响其他,所以没写patch装饰器。
ormconfig.js注释中包含是否输出log或者是错误,取消注释即可使用
其中synchronize设置为true是自动同步,若是修改了实体类,自动同步可能会导致修改的字段数据清空。
所以保存之前,重启服务前,先在数据库改,比如字段长度。然后在实体类改成一样的并保存,最后再重启服务。
或,synchronize设置false,修改实体类重启服务则不同步 ,然后手动在数据库修改成与实体类一样的属性。
restful规范中的返回值实际太费带宽,而我认为前端只需判断返回是字符串还是对象,如字符串就直接显示(前端弹窗就行),
如返回对象,请求状态码一定是200,所以只拿重要数据而不需code状态码和massage提示成功(那两东西完全是浪费流量)。
如你觉有收获,请务必给我打赏
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。