写的有点啰嗦,可以直接跳到文章最后看总结.
使用了一段小程序云开发的HTTP API,最开始的时候,我以为这个HTTP API可以在没有服务器的情况下,前端开发者就可以完成一个小程序的所有工作,等到真正去实践的时候,发现在没有服务器的情况下,你就要把要开发的小程序的相关信息,暴露在浏览器的可视环境下.
之所以会暴露小程序的相关信息,是因为只在前端调用HTTP API的时候,第一步要做的就是获取 access_token,之后所有的操作都要在有access_token情况下进行.而获取access_token的前提就是,你要把小程序的appid和secret传给微信的服务器.然后呢,稍微懂点技术的,就可以通过查看浏览器的调试面板,查看小程序的appid和secret.
云开发中,除了需要有access_token,还需要有云环境ID.一样会暴露出来,别人能看到这些
如果只是前端环境去做一个管理云数据库的后台,就会存在上面我说的问题.
我的解决办法,
1.有一个服务器,服务器保存有后台的帐号密码,在登录成功以后,返回access_token和env,存储到localStorage里面.后面就可以继续开发了.跨域的问题,可以用类似于vue代理的解决方案.
2.用electron写一个客户端管理工具,关闭跨域.
另外还有一个问题是数据库的操作部分,比如一个简单的插入操作,传值的时候竟然是字符串拼接的方式,如下
这是最让我费解的地方,字符串拼接不好的地方,做过前端的,应该都深有感触.而且还有就是,字符串拼接,就拼接吧,为什么字段的值,一定要用双引号,可能我有操作不当的地方,但我实践过程中,我用单引号代替双引号(或者直接用JSON.JSON.stringify),能插入成功,但返回的是这个
总结下云开发中碰到的问题,
1.没有服务器的,单纯的前端开发,如何在不暴露小程序相关信息(appid等)的情况下,获取access_token
2.云数据库的数据操作传值,query字段,有没有好方法去拼接字符串(为啥不能直接传JSON呢 - -)
字符串拼接
let str = ''
for(let key in data){
str += key +':\\"'+ data[key]+'\\",'
}
str = '{'+str+'}'
附上一段拼接的字符串,插入报错
"db.collection(\"articles\").add(
{
data:[
{_id:\"5\",
author:\"wing\",
catgory:\"未分组\",
content:\"<p>开始你的表演….</p>\",
createDate:\"2019-11-13 23:11\",
istop:\"false\",
tags:\"\",
title:\"测试标题1\",
type:\"post\",
upDate:\"2019-11-13 23:11\",
}
]
})"
我是一只还在成长中的前端小白,虚心求教,还望大佬大神,阿姨叔叔们,哥哥,姐姐,弟弟,妹妹们,不吝赐教,不胜感激.拜谢.
我是用反引号` `来拼装,这样就不用反斜杠,原脚本直接引用就行。
第一个问题,HTTP API 确实不是给“没有服务器”的人准备的。估计都没考虑这种情况。
你一定要在本地调用的话,就别分发给别人,这样攻击你的人知道你开机密码才能抓包。
你可以试试,看看哪个不报错
a="{a:'b'}"
JSON.parse(a)
========
a="{'a':'b'}"
JSON.parse(a)
========
a="{\"a\":'b'}"
JSON.parse(a)
========
a="{\"a\":\"b\"}"
JSON.parse(a)