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


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

技术限制

被技术限制了?据我所知目前没有面向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. [485] C2 Age Of Splendor Update 1 OpCodez

    [485] C2 Age Of Splendor Update 1 Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03  ...

  2. 用python判断三角形的形状

    # coding:utf-8 class point: def __init__(self,x,y,name): self.x = x self.y = y self.name = name '''两 ...

  3. 廖雪峰JS知识点整理——快速入门

    基本语法 1.每个语句以:结尾. 2.单行注释://... 3.多行注释:/*... ...*/ 数据类型和变量 运算 1.==自动转换数据类型在比较,不推荐使用 2.===不会转换数据类型,推荐使用 ...

  4. PHP、Navicat安装

    一.PHPStudy小皮面板:https://public.xp.cn/upgrades/phpStudy_64.zip 下载完成后解压后双击 点击立即安装 安装完成 启动MySQL,Nginx(my ...

  5. [自用初学]c++值传递和引用传递/ *&/ string

    https://baijiahao.baidu.com/s?id=1702573193376441989&wfr=spider&for=pc 总结: 1.函数参数传递主要分为值传递和& ...

  6. yield基础知识

    function* y(p1){ let r=p1; r=(yield r-5) //表达式A,在第1轮是普通return,在第2轮next(param)时会被param替换 r=(yield r*2 ...

  7. SQL Server datetime类型为null的有趣实验

    @data1 --变量 测试用 @data2 --当前时间 当@data1为null 则格式转换错误 直接控制台什么也不显示 也不报错 当定义'' 显示默认时间

  8. Java基础Day7-值传递和引用传递

    一.值传递 Java都是值传递. 值传递:是指在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,就不会影响到实际参数. 值传递是对基本数据类型而言. 二.引用传递 引用传递 ...

  9. 2月23日javaweb之Maven

    Maven常用命令 compile:编译 clean:清理 test:测试 package:打包 install:安装 Maven生命周期 Maven对项目构建的生命周期描述是一次构建过程经历了多少个 ...

  10. redis每天生成自增流水号(001、002...)

    原理:利用redis的RedisAtomicLong类实现该功能:让其每天第一次放置一个新的自增的值(一天过期)然后和每天的日期相加就可以了例子: 20180901 + 001 ;当天就是 20180 ...