这几天刷脉脉的时候看到一个话题初看觉得可笑,再看陷入沉思,最后还是决定花点时间想清楚,写下来。


确实没见人这么干过,为什么呢?

技术限制

被技术限制了?据我所知目前没有面向js的数据库驱动,但反观现在的技术大潮,写一个面向js的数据库驱动应该也不是什么难事。
安全限制被安全性限制了?js在网站中的分量不言而喻,数据展现、交互、检验、酷炫的效果等等,前端的大半壁江山非它莫属,但它的隐私性却捉襟见肘,F12以后便可窥全貌,当然这不算缺点,毕竟它直接和用户交流,而且运行在用户浏览器中,在好奇宝宝面前如皇帝的新装一般。

扩展\稳定性

假设已经有了js的数据库驱动而且安全性已经解决,是不是就可以了?非也,想想当初为什么要前后端分离,不就是为了分而治之降低复杂度、耦合性,提高稳定性,让各自的职责更清晰,难道要重走历史的老路?另一方面来讲前端是最不稳定的,需要时刻追随业务的角度,今天是pc端网页,明天是手机端h5,后天又是公众号、小程序等等,每种类型的前端都要把操作数据库的逻辑copy一遍,重复度太高,维护绝对是一种噩梦,基础的相对稳定的内容就应该下沉,而不是各自为政,回忆下TCP/IP四层结构,是不是越往下的越稳定,应用层花活很多,但越往下的层就越稳重。

任何事情脱离了场景都不能轻易说对错,恰好我最近手头有一个案例可以拿出来讨论一下。

场景出发

前几天朋友找我咨询一件事,他希望做一个演示的小程序,就两个页面,列表和详情,列表会有一个简单的搜索,问我都需要准备哪些资源,我虽然对于小程序不是很了解,但是根据公司里小程序的运行情况我大概跟他说需要以下几点:1.前端开发小程序页面;2.后端提供一个服务为前端提供接口,需要买一台服务器来运行后端服务和数据库;3.需要买一个公网域名,后端服务的接口需要公网能访问到;
朋友的反应是太复杂了,买机器、装数据库、公网域名,这一套没有点运维知识的人不好玩转,问我能不能简化,我说这就是最基本的了,他接着说网上介绍小程序有个云数据库你知道不,我看前端也可以直接操作数据库,你帮我看看是否可行,我准备找个前端就把这全套做了。
跟他交流完我觉得小程序这个云数据库有点意思,准备去官网探探虚实,新事物总能让人兴奋,一起来看下官网的介绍。

微信云开发

微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。

开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。

开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。

云开发优势

/ 1. 获取数据库引用
const db = wx.cloud.database()
// 2. 构造查询语句
// collection 方法获取一个集合的引用
// where 方法传入一个对象,数据库返回集合中字段等于指定值的 JSON 文档。API 也支持高级的查询条件(比如大于、小于、in 等),具体见文档查看支持列表
// get 方法会触发网络请求,往数据库取数据
db.collection('books').where({
publishInfo: {
country: 'United States'
}
}).get({
success: function(res) {
// 输出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})

总结

简单总结下步骤:

1.开通云开发服务;

2.控制台创建集合、维护数据;

3.前端使用sdk直接读取云数据库中数据;

4.前端展示数据;

相对于传统开发模式省去了维护数据库,购买公网域名等事项,极大的提高了开发速度,降低了运维难度。

很显然前端直接操作数据库的技术限制被解决了,那安全问题呢?F12、抓包等手段在小程序面前已然是败下阵来,毕竟它的底座是微信,不信你抓包看看?

回到我们开头提到的扩展\稳定性,对于简单场景来讲无伤大雅,真有扩展需求时再重构也不晚,毕竟简单,对于我朋友那种演示场景来讲快速看到成品才是最重要的,需要快速试错。

作为技术人来讲不要太追求“技术”,要适当的学会妥协,切记不能脱离场景。

  

 

js直接操作数据库会怎么样的更多相关文章

  1. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  2. js操作数据库实现注册和登陆

    自从node-js出现之后,不只是java,php等后端语言可以操作数据库,进行内容的增删改查,javascript简本语言同样具备了该项技能,而且在node下,js具备了很强的操作性和代码的阅读性, ...

  3. jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?

    jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JA ...

  4. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  5. JavaScript操作数据库JS操作Access数据库

    avaScript操作数据库JS操作Access数据库,跟其他语言操作差不多,总结了一下习惯代码,仅供参考学习.现在在F盘有文件abc.mdf,表名为Student,一共2个字段,Id数字类型主键,s ...

  6. Asp.Net MVC 自定义的MVC框架(非EF操作数据库)

    一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...

  7. go操作数据库 Go-SQL-Driver/MySQL 使用详解

    go操作mysql的驱动包很多,这里讲解当下比较流行的Go-SQL-Driver/MySQL1.下载安装 执行下面两个命令: 下载:go get github.com/Go-SQL-Driver/My ...

  8. node.js高效操作mongodb

    node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...

  9. Node.js连接MySQL数据库及构造JSON的正确姿势

    做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...

  10. 前端笔记之服务器&Ajax(中)MySQL基础操作&PHP操作数据库&Ajax

    一.数据库基础 1.1什么是数据库? 什么是数据库? 答:就是一个很大的一个文件,只不过这个文件可以通过一些‘命令’操作数据: 增.删.改.查数据: 数据库等于持久数据和数据操作的一个统称. 数据库是 ...

随机推荐

  1. 实时中文语音克隆——开源项目MockingBird体验

    [引子] 在今年大型网络攻防演练前不久,笔者接到一个公司的座机号码来电,上来就问防守准备得怎么样了,哪里还有不足等.等等,这声音不认识,笔者第一反应就是蓝军(Red Team)来进行社会工程攻击,于是 ...

  2. 【shell脚本实战】脚本#35 分析每个用户使用的磁盘空间大小

    #!/bin/bash #设置 一个变量代表临界值,看看是否能超过这个值,单位是MB MAXDISKUSAGE=20000 #cut -d: -f1,3 /etc/passwd | awk -F: ' ...

  3. 在Unity3D中开发的Ghost Shader

    SwordMaster Ghost Shader 特点 此Shader是顶点片元Shader,由本人手动编写完成 此Shader已经在移动设备真机上进行过测试,可以直接应用到您的项目中 所支持的Uni ...

  4. elementUI table 数组中各项加逗号隔开

    js处理 //this.newTableData 数组 this.newTableData.map((item,index)=>{ //item.label 数组 if(item.label){ ...

  5. Java中String,JSON对象,java实体类(Bean)之间的相互转换

    FastJson对于json格式字符串的解析主要用到了一下三个类: (1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. (2)JSONObje ...

  6. C的基础常识

    C是可移植性语言,因此可以在许多环境中使用,包括UNIX.Linux.MS-DOS.Windows和Macintosh OS. 使用C语言编写的内容的文本,称为源代码文件(source code fi ...

  7. Android 自定义View (三)

    一.前言 上节 讲解了旋转圆环基本的实现方法.本文将在此基础上进一步改进,在属性文件中自定义控件属性,避免代码中显式调用setXXX() 方法. 二.流程 首先,在资源文件 values 中新建一个 ...

  8. Delphi中IdHttp调用接口,返回值乱码

    --------开发环境是Delphi XE10-------- 这里要说的是BUG问题, var respStream : TStringStream; respStream.DataString有 ...

  9. density plot

    FIN=read.table("/Users/zhongyuantian/macshare/workSpace2021/1.TFY/1.3.TFY20201215/1.3.1.TFY1C_T ...

  10. Vue学习之基础大全

    1 导入vue: 2 <script src="vue.min.js"></script> 3 创建vm实例 4 var vm=new Vue({ 5 el ...