前端开发者该如何设置数据库
2017-11-29 13:40:28 来源:易采站长网友投稿 作者:admin
近来有人去问我,做为前端开辟职员保留用户数据疑息的最烦琐的办法是甚么。因而我去阐明一下怎样真现它。
设置数据库
尾先我们需要先有一个数据库。您能够经由过程 mlab 获得一个免费的。注册以后,正在 MongoDB 的部下表中面击 新建。 我们要用的是那个免费的沙盒数据。
创立数据库以后,我们需求创立一个账户以便于我们停止自我考证。面击数据库称号,然后面击 用户 , 并增加数据库用户 。 写下您挑选的以后要用到的用户名战稀码 。

正在数据库页里的顶部,您可以看到一个 MongoDB URI 。那是我们数据库的网址。那个数据库的 URI 相称于网页的 URL 。凡是状况下,MongoDB 的 URI 以下:
mongodb://<dbuser>:<dbpassword>@<host>:<port>/<dbname>
比方,我的:
mongodb://admin:superSecretPassword@ds111885.mlab.com:11885/medium
设置效劳器
我们会正在后端利用 Node。您能够单击 那里 克隆我正在 Glitch 上的项目,省来本人设置的费事。
我们从 server.js 开端,以下:
// init project
const express = require('express'); // the library we will use to handle requests
const app = express(); // instantiate express
app.use(require("cors")()) // allow Cross-domain requests
app.use(require('body-parser').json()) // automatically parses request data to JSON
// base route
app.get("/", function (request, response) {
response.send("TODO") // always responds with the string "TODO"
});
// base route
app.post("/", function (request, response) {
response.send("TODO") // always responds with the string "TODO"
});
app.put("/", function (request, response) {
response.send("TODO") // always responds with the string "TODO"
});
// listen for requests, the process.env.PORT is needed because
// we are using glitch, otherwise you could have written 80 or whatever
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 很像,可是有充足开理的来由利用 POST 战 PUT 办法替代 GET。
路由
正在您停止效劳器开辟时,您需求停止一些测试。您能够用简朴的网站 REST test test 大概 Insomnia 使用法式来运转一下 HTTP 恳求。
面击 显现 按钮,去查抄 Glitch 使用法式的 URL 。
到今朝为行,我们只是用过路由 / 。可是假如我们念对差别的用户存储差别的疑息,我们便需求给差别的用户分派一个差别的路由。
比方: /ZaninAndrea 战 /JohnGreen
如今有一个易面:
我们不成能对每条路由停止编码,果为它没有是一个可扩大的办法。我们需求的是 路由参数 。接下去我们只编码一个路由:/:user
冒号是正在表达要捕获任何故/开端的而且只包罗字符数字的路由。
以下例所示:
/ZaninAndrea 可以捕获到
/Johnny45 可以捕获到
/alex/score 没有 能捕获到
我们能够正在变量 request.params.user 中检索 user
// base route
app.get("/:user", function (request, response) {
response.send(request.params.user)
});
// base route
app.post("/:user", function (request, response) {
response.send(request.params.user)
});
// base route
app.put("/:user", function (request, response) {
response.send(request.params.user)
});
如今效劳器能够呼应每个查询并显现查询的用户名。
背数据库删减数据
我们晓得 user 是谁了,如今我们念存储一些闭于他的疑息。
为了查询数据库,我们会利用 mongodb 库。您能够用以下两个办法装置:
npm install mongodb --save
大概假如您利用 Glitch ,您能够切换到 package.json 文件并面击 Add package 按钮。
我们减载 mongodb 库然后存储 MongoDB URI 到一个变量中:
const mongodb = require('mongodb'); // load mongodb
const uri = process.env.URI;
URI 是很敏感的疑息——那是会见数据库所需的统统。最好把 URI 放到一个 .env 文件中,.env 文件中的疑息关于其别人是不成睹的。
URI=mongodb://admin:PASSWORD@ds111885.mlab.com:11885/medium
Glitch 会主动从 .env 文件中减载变量到 process.env 变量。
数据库的毗连是同步的操纵,以是我们需求像那样正在回调中包拆一切效劳器设置:
mongodb.MongoClient.connect(uri, function(err, db) {
// base route
app.get("/:user", function (request, response) {
response.send(request.params.user)
});
// base route
app.post("/:user", function (request, response) {
response.send(request.params.user)
});
// base route
app.put("/:user", function (request, response) {
response.send(request.params.user)
});
// listen for requests, the process.env.PORT is needed because
// we are using glitch, otherwise you could have written 80 or whatever
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) {
// inserts a new document on the server
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 办法更新已存正在的用户疑息。
// base route
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 办法的第一个参数相似。
第两个参数是更新文档恳求—您能获得更对疑息从 那里 。正在我们的例子中,我们报告数据库将用户通报的数据取已存正在的数据兼并。
可是要当心,果为嵌套参数将会被交换而没有是兼并。
最初
关于数据库战背景编程去道那只是方才开端,可是那足以让您开端小我私家项目。
以后我能够会写一些闭于身份考证的文章,正在此之前,请没有要正在里边存储一些比力敏感的数据。
您能够修正那个完好的项目 正在那 ,您将需求有一个本人的数据库,假如您借没有会创立,请回到 设置数据库 部门。
假如您以为那篇文章借没有错,请给它一些掌声让更多的人看到它。开开!













闽公网安备 35020302000061号