js直接操作数据库会怎么样
这几天刷脉脉的时候看到一个话题初看觉得可笑,再看陷入沉思,最后还是决定花点时间想清楚,写下来。



确实没见人这么干过,为什么呢?
技术限制
被技术限制了?据我所知目前没有面向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直接操作数据库会怎么样的更多相关文章
- [转]html5 js 访问 sqlite 数据库的操作类
本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...
- js操作数据库实现注册和登陆
自从node-js出现之后,不只是java,php等后端语言可以操作数据库,进行内容的增删改查,javascript简本语言同样具备了该项技能,而且在node下,js具备了很强的操作性和代码的阅读性, ...
- jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?
jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JA ...
- node.js操作数据库之MongoDB+mongoose篇
前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...
- JavaScript操作数据库JS操作Access数据库
avaScript操作数据库JS操作Access数据库,跟其他语言操作差不多,总结了一下习惯代码,仅供参考学习.现在在F盘有文件abc.mdf,表名为Student,一共2个字段,Id数字类型主键,s ...
- Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...
- go操作数据库 Go-SQL-Driver/MySQL 使用详解
go操作mysql的驱动包很多,这里讲解当下比较流行的Go-SQL-Driver/MySQL1.下载安装 执行下面两个命令: 下载:go get github.com/Go-SQL-Driver/My ...
- node.js高效操作mongodb
node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...
- Node.js连接MySQL数据库及构造JSON的正确姿势
做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...
- 前端笔记之服务器&Ajax(中)MySQL基础操作&PHP操作数据库&Ajax
一.数据库基础 1.1什么是数据库? 什么是数据库? 答:就是一个很大的一个文件,只不过这个文件可以通过一些‘命令’操作数据: 增.删.改.查数据: 数据库等于持久数据和数据操作的一个统称. 数据库是 ...
随机推荐
- <<Python编程:从入门到实践>>踩坑记 Django
<<Python编程:从入门到实践>>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是 ...
- go理论知识总结
基于const常量理解个中类型的内存分配引入参考 官方:Constant expressions may contain only constant operands and are evaluate ...
- new关键字的作用
new关键字会进行如下的操作: 1. 创建一个空的简单JavaScript对象(即`{}`): 2. 为步骤1新创建的对象添加属性`__proto__`,将该属性链接至构造函数的原型对象 : 3. 将 ...
- lvds接口
1.lvds就是差分信号接口,tft-lcd屏幕,一种常用的接口. 2.有3种标准,18bit, 24bit(JEIDA) 与 24bit(VESA) 详细看https://www.topwaydis ...
- https://计算机四级
计算机四级内容: 一,网络工程师 基本要求 1.了解大型网络系统规划.管理方法: 2.具备中小型网络系统规划.设计的基本能力: 3.掌握中小型网络系统组建.设备配置调试的基本技术: 4.掌握企事业单位 ...
- 面向对象程序设计 第二章 C++简单的程序设计
目录 C++语言的特点 1.兼容C语言 · 它保持了C的简洁.高效和接近汇编语言等特点. · 对C的类型系统进行了改革和扩充. · C++也支持面向过程的程序设计,不是一个纯正的面向对象的语言 2.支 ...
- 标记一下CF教育场的网址
(因为太难翻了,做到哪里标到哪,自用 Educational Codeforces Round 1 Educational Codeforces Round 2 Educational Codefor ...
- C# POST multipart/form-data 方式提交数据
一.提交方法 /// <summary> /// MultipartFormData Post方式提交 /// </summary> /// <param name=&q ...
- conda相关的设置备忘
因为默认channel已经没有3.4.4(最后一个支持xp的python3)了,为了添加这个的版本,尝试先用conda-forge channel: conda create -n myenv pyt ...
- n-Queens(n皇后)问题的简单回溯
package com.main; import java.util.LinkedList; public class NoQueue { public LinkedList<Node> ...
