云开发,HTTP API调用,query字段的字符串拼接,怎样才能更简单一些?
发布于 7 年前 作者 renping 13239 次浏览 来自 官方Issues

       写的有点啰嗦,可以直接跳到文章最后看总结.

      使用了一段小程序云开发的__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\”,

}

]

})"

我是一只还在成长中的前端小白,虚心求教,还望大佬大神,阿姨叔叔们,哥哥,姐姐,弟弟,妹妹们,不吝赐教,不胜感激.拜谢.

4 回复
你好,你这个解决了嘛?我也遇到这个问题,谢谢

第一个问题,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)

我是用反引号` `来拼装,这样就不用反斜杠,原脚本直接引用就行。

回到顶部