crud-object-class.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 面向对象的写法
  11. // FmodeObject对象增删改 FmodeQuery对象查询
  12. /**
  13. *
  14. @example
  15. let query = new FmodeQuery("Project")
  16. query.lessThanAndEqualTo("duration", 30)
  17. let projectList = await query.find()
  18. */
  19. class FmodeQuery{
  20. className
  21. where
  22. include
  23. constructor(className){
  24. this.className = className
  25. }
  26. equalTo(key,value){
  27. this.where[key] = value
  28. }
  29. lessThanAndEqualTo(key,value){
  30. this.where[key] = {$lte:value}
  31. }
  32. greaterThan(key,value){
  33. this.where[key] = {$gt:value}
  34. }
  35. async get(){
  36. }
  37. async find(){
  38. /*
  39. 从JSON格式的where到请求参数的where
  40. 1.将JSON转换成字符串
  41. 2.将字符串进行encodeURIComponent加密
  42. */
  43. let whereStr = ``
  44. if(Object.keys(this.where)?.length>0){
  45. whereStr = encodeURIComponent(JSON.stringify(this.where))
  46. }
  47. let response = await fetch("http://dev.fmode.cn:1337/parse/classes/Project?"+whereStr, {
  48. "headers": {
  49. "accept": "*/*",
  50. "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  51. "x-parse-application-id": "dev"
  52. },
  53. "referrer": "http://127.0.0.1:4040/",
  54. "referrerPolicy": "strict-origin-when-cross-origin",
  55. "body": null,
  56. "method": "GET",
  57. "mode": "cors",
  58. "credentials": "omit"
  59. });
  60. /*
  61. {
  62. results:[
  63. {objectId:xxxxx,name:xxxx}
  64. ]
  65. }
  66. */
  67. let data = await response.json()
  68. return data.results.map(item=>{
  69. let fmodeObject = new FmodeObject(this.className)
  70. fmodeObject.set(item)
  71. return
  72. })
  73. }
  74. }
  75. class FmodeObject{
  76. className
  77. id
  78. data
  79. constructor(className){
  80. this.className = className
  81. }
  82. set(data){
  83. this.data = {
  84. ...this.data,
  85. ...data
  86. }
  87. if(data?.objectId){
  88. this.data.id = data?.objectId
  89. }
  90. }
  91. // 无id保存,创建;有id保存,更新
  92. async save(){
  93. let data = this.data;
  94. delete data.objectId;
  95. delete data.updatedAt;
  96. delete data.createdAt;
  97. delete data.ACL;
  98. let updateId = this.id?`/${this.id}`:''
  99. let method = "POST"
  100. if(updateId){
  101. method = "PUT"
  102. }
  103. let response = await fetch("http://dev.fmode.cn:1337/parse/classes/"+this.className+updateId, {
  104. "headers": {
  105. "accept": "*/*",
  106. "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  107. "content-type": "text/plain;charset=UTF-8",
  108. "x-parse-application-id": "dev"
  109. },
  110. // JSON字符串
  111. "body": JSON.stringify(data),
  112. "method": method,
  113. "mode": "cors",
  114. "credentials": "omit"
  115. });
  116. let result = await response?.json()
  117. if(result.objectId){
  118. this.id = result.objectId
  119. }
  120. return this
  121. }
  122. async destroy(){
  123. let response = await fetch("http://dev.fmode.cn:1337/parse/classes/Project/IjCmjyMS23", {
  124. "headers": {
  125. "accept": "*/*",
  126. "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  127. "content-type": "text/plain;charset=UTF-8",
  128. "x-parse-application-id": "dev"
  129. },
  130. "referrer": "http://127.0.0.1:4040/",
  131. "referrerPolicy": "strict-origin-when-cross-origin",
  132. "body": null,
  133. "method": "DELETE",
  134. "mode": "cors",
  135. "credentials": "omit"
  136. });
  137. }
  138. }
  139. // JSON.stringify
  140. // JSON.parse
  141. async function createProject(projectData){
  142. let project = new FmodeObject("Project")
  143. project.set({
  144. name:"测试项目1",
  145. duration:10
  146. })
  147. project = await project.save()
  148. project.set({desc:"项目1的描述文档"})
  149. project.save() // 更新
  150. project.destory() // 删除
  151. }
  152. async function createProfile(data){
  153. let profile = new FmodeObject("Profile")
  154. profile.set({
  155. name:"新成员未命名1",
  156. gender:"女"
  157. })
  158. profile.save()
  159. }
  160. </script>
  161. </body>
  162. </html>