前端开发人员如何搭建数据库
2017-12-31 00:00
537 查看
问题:我怎么才能收到你们公众号平台的推送文章呢?答案:只需要点击标题下面的蓝色字【web前端开发】关注即可。
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_jpg/eXCSRjyNYcb42a6uIduKZEcJORaFMRppLfhxDOlhDLq3CtgFOgN2RReMSGGPeOPCgiaVIr18z48Q09ZSibklFekA/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1)
最近有人问我,前端开发人员要存储用户数据,最简单的方法是什么。现在仅关于这部分,我来说明下怎么做。
然后,
![](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_jpg/eXCSRjyNYcbQUA7icXCbfuQVFfjwKpQw59VjVibMSWdzaibic29icAYLWtrRZMvBaKml21CH2l5jvSuiasNP5l91jyHw/640?wx_fmt=jpeg)
关注我们
最近有人问我,前端开发人员要存储用户数据,最简单的方法是什么。现在仅关于这部分,我来说明下怎么做。
搭建数据库
首先,要实际拥有一个数据库。可以去mlab网站找一个免费的。注册好后,在MongoDB部署(Deployments)栏里点击创建新数据库(create new)。创建出来的这个沙盒数据库是不用钱的,所以就用这个。创建数据库后,要建一个帐户,这样就能验证自己的身份。点击数据库的名字,然后点用户(users),再点添加数据库用户(add database user)。把选用的用户名和密码写下来,之后要用。在数据库页面顶端,应该可以看到MongoDB的地址。这是数据库的页面地址,就像一个网页地址一样。按惯例,MongoDB地址格式如下:mongodb: //<用户名>:<密码>@<主机>: <端口>/<数据库名称>比如,我的数据库是:
mongodb: //admin: superSecretPassword @ds111885.mlab.com: 11885/medium
搭建服务器
服务器后台我们要用Node平台。想跳过搭建过程的话,可以克隆我在Glitch上的项目,点击这里看一下我写的server.js启动文件:
// 初始化项目 const express = require('express'); // 需要导入处理请求的express库 const app = express(); // 实例化express库 app.use(require("cors")()) // 允许跨域请求 app.use(require('body-parser') .json()) // 自动解析请求数据,并转成JSON // 基本路径 app.get("/", function (request, response) { response.send("TODO") // 所有的请求都以 一个字符串"TODO"来响应 }); // 基本路径 app.post("/", function (request, response) { response.send("TODO") // 所有的请求都以 一个字符串"TODO"来响应 }); app.put("/", function (request, response) { response.send("TODO") // 所有的请求都以 一个字符串"TODO"来响应 }); // 因为我们用的是glitch的网络域, 所以监听请求的端口要设成 process.env.PORT。 // 否则,端口可以设成80或者别的什么。 var listener = app.listen (process.env.PORT, function () { console.log ('Your app is listening on port ' + listener.address().port); });先导入
express库,这个库用来处理发送到服务器的请求。跨域请求是从一个域内的网站发送到另一个域内的服务器去的请求,要用
use(require(cors))来允许之种请求。
app.use(require('body-parser').json())这一句自动解析请求,转成JSON。然后我们为
get方法输入一个处理路径和处理用的回调函数。也就是说,无论何时,打开网站的
/路径页面时,请求就会由那个回调函数处理。基本域名是隐含在其中的,所以以http://shiny-koala.glitch.com为域名的话,路径
/about指的就是http://shiny-koala.glitch.com/about地址。更准确地说,“打开页面”的意思就是用
GET方法把一个请求发送到服务器。不同的Http方法其实只是不同类型的请求发送到服务器而已。我们只用下面几种方法:
GET方法用来从服务器获取资源。比如,打开Facebook页面时要加载必需的HTML,CSS和JavaScript资源。
POST方法用来在服务器上创建资源。比如,在Facebook上发贴,贴子里写的信息就是通过
POST请求发送到Facebook服务器上去的。
PUT方法用来在服务器上更新资源。比如,编辑一个贴子时,编辑的内容就通过
PUT请求发送到Facebook服务器上去。
app.post函数、
app.put函数跟
app.get函数原理完全相同。当然,这两个函数处理的不是GET方法,而是POST和PUT方法,非常合理。
路径
服务器开发时,需要做一些测试。运行HTTP请求可以用这个网站REST test test,很方便。或者也可以用Insomnia程序。要查看这个Glitch网站程序的地址,点击显示(show)按钮。目前为止,我们都只用了/路径。但我们要的是把不同用户的信息存储起来,所以需要为每个用户设置一个不同的路径。 比如:
/ZaninAndrea和
/JohnGreen路径。那么就产生了一个问题:不可能把所有的路径一个个都编写出来,这种方法扩展性太差。我们需要的是路径参数(route parameters), 这样只要写一个路径:
/:user即可。这里面的冒号告诉Express库要捕捉任何开始字符为
/,并且接下来只由数字字母组成的路径。举些例子:
/ZaninAndrea要捕捉
/Johnny45要捕捉
/alex/score不捕捉
然后,
user的值可以在
request.params.user变量里取得。
// 基本路径 app.get ("/:user", function (request, response) { response.send (request.params.user) }); // 基本路径 app.post("/:user", function (request, response) { response. send(request.params.user) }); // 基本路径 app.put("/:user", function (request, response) { response.send (request.params.user) });现在,所有带用户名的查询请求,服务器都能够以用户名回应了。
为数据库加入数据
我们知道用户是谁了,现在要把用户信息存储起来。查询数据库,我们会用mongodb库。可以用下面两种方法之一安装:
npm install mongodb --save如果用的是Glitch,也可以去
package.json文件,点击添加软件包(Add package)按钮。让我们加载这个库,然后把MongoDB地址保存在一个变量里:
const mongodb = require('mongodb'); // 加载mongodb库 const uri = process.env.URI;这个地址属于敏感信息,因为只要有了它就能访问数据库了。最好把这个地址放在一个
.env文件里,这样别人就看不见了。
URI=mongodb: //admin: PASSWORD@ds111885.mlab.com :11885/mediumGlitch会自动从
.env文件中把这个变量加载到
process.env变量中去。连接数据库是一种异步操作,所以我们要把服务器搭建步骤包裹在一个回调函数里,像这样:
mongodb.MongoClient. connect(uri, function(err, db) { // 基本路径 app.get("/:user", function (request, response) { response.send(request. params.user) }); // 基本路径 app.post("/:user", function (request, response) { response. send(request.params.user) }); // 基本路径 app.put("/:user", function (request, response) { response.send (request.params.user) }); // 因为我们用的是glitch的网络域, 所以监听请求的端口要设成 process.env.PORT。 // 否则,端口可以设成80或者别的什么。 var listener = app.listen(process.env.PORT, function () { console.log(' Your app is listening on port ' + listener.address().port); }); })数据库以集合方式组织起来,集合中又包含了文档,文档基本就是JSON文件。所以让我们连接到用户
user这个集合上去,第一次访问时,这个集合会自己创建。
mongodb.MongoClient.connect (uri, function(err, db) { const collection = db.collection('users') // ... }首先,我们要处理
POST方法的路径,用这个方法来把一个新用户的数据加进去。然后,我们要用
PUT方法的路径来更新。
app.post("/:user", function (request, response) { // 在服务器上插入一个新的文档 collection.insertOne ({ ...request.body, user : request.params.user }, function (err, r) { if (err){ response.send ("An error occured") }else{ response.send("All well") } }) });集合的
collection.insertOne插入方法可以给集合加入一个新文档。在我们的例子里,每个用户都有一个独立的文档。
{ ...request.body, user : request.params.user }参数利用展开操作符将请求主体内容中的数据与从URL获取的用户数据合并。结果就是文档保存在了集合里。第二个参数是一个回调函数,只是通知用户操作的结果。
从数据库中获取数据
既然服务器上已经有了些数据,那么我们就想要读取数据。我们用GET方法来读取。
app.get("/:user", function (request, response) { collection.find({ user : request.params.user }) .toArray(function (err, docs) { if (err){ response .send("An error occured") }else{ response.send(docs) } }) });这次,第一个参数是一个过滤器,告诉数据库只把符合用户属性的文档发回来。返回到用户的文档是一个列表,因为理论上可能会不只有一个文档拥有那个用户的属性。要不要保证只返回一个,取决于我们自己。
更新数据库的数据
最后,PUT方法可以用来更新已经存在的用户数据。
// 基本路径 app.put("/:user", function (request, response) { collection.updateOne( { user : request.params.user }, {$set:{ ...request.body, user : request.params.user }}, function (err, r) { if (err){ response.send ("An error occured") }else{ response.send("All well") } }) });第一个参数是一个过滤器,就像
GET方法里一样使用。第二个参数是一个更新文档。看这里可以了解更多。在这个例子里,我们告诉数据库要把用户传进来的数据与已有的数据合并。不过要小心,因为嵌套参数将被替换,而不是合并。
再见
要把这个文章当作数据库和后台编程指南的话还远不完整,不过其内容应该足以让大家可以开始搭建数据库,为个人项目提供一些助力。在将来的文章里,我可能会写些关于身份验证的东西。在那之前,请不要用这个数据库存储敏感数据。在这里,大家可以对这个项目进行小修小补。来源:http://www.zcfy.cc/article/how-to-set-up-a-database-if-you-re-a-front-end-developer-4574.html广告内容关注我们
相关文章推荐
- 前端开发人员如何制作微信小程序模板
- iOS开发人员,如何搭建属于自己的服务器
- 如何衡量前端开发人员技能的重要指标,会不断补充的。
- 开发人员如何有效地进行数据库设计
- JAVA WEB中如何让数据库连接对开发人员完全透明?
- 前端开发人员如何提高自己的竞争力
- 前端开发人员守则:如何避免浏览器兼容问题!
- 开发人员如何有效地进行数据库设计
- 前后端完全分离后前端如何启动静态服务保证开发人员的访问?
- 阿里云数据库实例的一个db被开发人员删除了 如何恢复
- 手把手教你如何用eclipse搭建前端开发环境
- 前端开发人员当后端没有给你接口的时候,如何进行功能测试?
- 【原创】前端开发人员如何制作微信小程序模板
- 开发人员如何有效的进行数据库设计
- Tom White 是 Kizoom 的首席 Java 开发人员 实现的 如何实现每天定时对数据库的操作
- 开发人员如何有效的进行数据库设计
- Google台湾工程研究所所长:开发人员如何培养自己
- 如何搭建Visual Studio的内核编程开发环境
- 开发人员如何成为架构师
- 关于软件开发人员如何提高自己的软件专业技术方面的具体建议