前端开发人员如何搭建MongoDB数据库

发布时间:2022-07-20 15:34:02 作者:wanglinbo 阅读量:7008

最近有人问我,前端开发人员要存储用户数据,最简单的方法是什么。现在仅关于这部分,我来说明下怎么做。

搭建MongoDB数据库

首先,要实际拥有一个数据库。可以去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('bo-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('bo-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/medium

Glitch会自动从.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.bo, user : request.params.user }, function (err, r) {
      if (err){
        response.send("An error occured") 
      }else{
        response.send("All well")
      }
    })
  });

集合的collection.insertOne插入方法可以给集合加入一个新文档。在我们的例子里,每个用户都有一个独立的文档。

{ ...request.bo, 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.bo, user : request.params.user }},
                         function (err, r) {
      if (err){
        response.send("An error occured") 
      }else{
        response.send("All well")
      }
    })
  });

第一个参数是一个过滤器,就像GET方法里一样使用。

第二个参数是一个更新文档。看这里可以了解更多。在这个例子里,我们告诉数据库要把用户传进来的数据与已有的数据合并。

不过要小心,因为嵌套参数将被替换,而不是合并。

再见

要把这个文章当作数据库和后台编程指南的话还远不完整,不过其内容应该足以让大家可以开始搭建数据库,为个人项目提供一些助力。

在将来的文章里,我可能会写些关于身份验证的东西。在那之前,请不要用这个数据库存储敏感数据。

在这里,大家可以对这个项目进行小修小补。当然,这需要有自己的数据库,如果还没创建好,请回看搭建数据库这个部分。

如果喜欢这篇文章,请给些掌声,使更多的人能看到。谢谢!


***本网站图片,文字之类版权申明,因为网站可以由注册用户自行上传图片或文字,本网站无法鉴别所上传图片或文字的知识版权,如果侵犯,请及时通知我们,本网站将在第一时间及时删除。

我要评论

网友评论


评论时间:2023-05-10 03:25:02

3、服务云主机 免备案 旧手机当服务器 3、服务器出售


评论时间:2023-04-25 06:25:01

3、在选择了X86和Windows操作系统之后,就可以根据自己的需求云主机能在中国备案吗 进行配置深圳云服务器生产商 dows操作系统之后,就可以根据自己的需求进行配置


评论时间:2022-11-16 03:25:01

服务器租用哪家好而且便宜,现在越来越多的企业选择了在自己公司内部建设一个数据中云主机用什么系统 心来为其提供服务免费空间与云主机 越多的企业选择了在自己公司内部建设一个数据中心来为其提供服务


评论时间:2022-10-03 09:25:02

16.不要过度劳累17.不要滥用药物18.保持良好的心态七日杀怎么创建服务器 19.按时吃饭20.不喝酒21.不吸烟22.不熬夜23.少吃多餐云主机电脑关机关不了一直转圈 21.不吸烟22.不熬夜23.少吃多餐


评论时间:2022-08-10 21:25:02

下面小编将为大家简单的介绍下几种常用服务器类型:x86服务器x86服务器是指基于微软公司的云主机可以下wegame吗 x86架构开发出来的服务器产品云主机的配置有哪些

最新文章

 2023-12-25 22:44:35   admin

活动发布区版规

 2023-05-27 22:03:52   御风而行

容器、无服务器、虚拟机:安全性差...

 2023-05-27 19:08:41   小绵羊0123

科技巨头布局云端 服务器 网络硬...

 2023-05-27 18:17:46   姐姐的跟屁虫

钉钉因系统访问流量激增,宕机1小...

热门阅读

 2022-07-23 00:34:02   freeatom

常见ftp命令 FTP命令使用详...

 2022-07-21 02:17:02   ares

双硬盘组建Raid0磁盘阵列图文...

 2022-07-20 06:17:02   mankeung123

用友软件客户端连接不上服务器的解...

 2022-07-23 00:51:02   antonfxb

WebService实例

 2022-07-13 05:38:02   苯小孩

开发、运维不可不看的Linux调...

 2022-07-20 18:51:02   nightstone

如何使用Charles抓取Web...

随机文章

 2021-12-30 05:38:01   xxmsian

双线服务器托管上数据中心

 2022-01-15 05:38:02   二图

我应该选择双线双IP机房还是双线...

 2022-03-05 05:38:02   gimmy

数据迁移系统包括什么

 2022-03-14 05:38:03   netstu86

Nginx如何限制流量

 2022-03-26 05:38:03   cech

如何在webmin中设置samb...

热评文章

 2022-07-19 20:17:02   dengyu0429

linux vi使用及详细介绍

 2022-07-20 01:00:05   激动的舌头

Linux视频教程:用户管理命令...

 2022-07-21 20:51:02   jessica-an

创建本地FTP站点

 2022-02-07 05:38:03   jasonkidd

WEB服务器配置详解

 2022-07-20 04:51:02   wolfssss

ACL权限-默认与递归(4)

 2022-07-22 15:00:05   淡水珊瑚

Linux下 Samba Ser...
全球云服务器
Catfish(鲶鱼) Blog V 4.7.3