zoukankan      html  css  js  c++  java
  • 前端开发者该如何设置数据库

    下载网站:www.SyncNavigator.CN 
     客服QQ1793040
    ----------------------------------------------------------


    关于HKROnline SyncNavigator 注册机价格的问题

     

    HKROnline SyncNavigator 8.4.1 非破解版 注册机 授权激活教程
     

     

    最近一直在研究数据库同步的问题,在网上查了很多资料,也请教了很多人,找到了一种通过快照复制的方法。研究了一番后发现之前就是用的这个方法,效果不是很好,果断放弃。经过了一番寻觅和他人指点,最后从一位热心网友那里得知一款很好用的软件—— SyncNavigator。

    好东西就要拿出来跟大家分享,所以今天向大家介绍一下这款软件,及其一些使用方法。下面先看看它有什么强大的功能吧!

    SyncNavigator的基本功能:

    自动同步数据/定时同步数据
    无论是实时同步/24小时不间断同步,还是根据计划任务(每小时/每日/每周/等)定时自动同步都能完全胜任。

    完整支持 Microsoft SQL Server
    完整支持 Microsoft SQL Server 2000 2005 2008 数据库类型。并能在不同数据库版本之间相互同步数据。

    支持 MySQL 4.1 以上版本
    支持 MySQL 4.1 5.0 5.1 5.4 5.5。并能在不同数据库版本之间相互同步数据。

    无人值守和故障自动恢复
    当数据库故障或网络故障以后,无需人工干预(或操作)自动恢复同步并确保数据完全准确,可靠。

    同构数据库同步/异构数据库同步
    SQL Server to SQL Server, MySQL to MySQL, SQL Server to MySQL 等都能轻松实现。

    断点续传和增量同步
    当同步完成(或中断)后,再次同步时能继续上一次的位置增量同步,避免每次都需要从头开始的问题。

    最近有人来问我,作为前端开发人员保存用户数据信息的最简便的方法是什么。因此我来说明一下如何实现它。

    配置数据库

    首先我们须要先有一个数据库。你可以通过 mlab 获取一个免费的。注册之后,在 MongoDB 的部属表中点击 新建。 我们要用的是这个免费的沙盒数据。

    创建数据库之后,我们需要创建一个账户以便于我们进行自我验证。点击数据库名称,然后点击 用户 , 并添加数据库用户 。 写下你选择的之后要用到的用户名和密码 。

    前端开发者该如何设置数据库

    在数据库页面的顶部,你能够看到一个 MongoDB URI 。这是我们数据库的网址。这个数据库的 URI 相当于网页的 URL 。通常情况下,MongoDB 的 URI 如下:

    1. mongodb://<dbuser>:<dbpassword>@<host>:<port>/<dbname> 

    例如,我的:

    1. mongodb://admin:superSecretPassword@ds111885.mlab.com:11885/medium 

    设置服务器

    我们会在后端使用 Node。你可能单击 这里 克隆我在 Glitch 上的项目,省去自己设置的麻烦。

    我们从 server.js 开始,如下:

    1. // init project 
    2. const express = require('express'); // the library we will use to handle requests 
    3. const app = express(); // instantiate express 
    4. app.use(require("cors")()) // allow Cross-domain requests  
    5. app.use(require('body-parser').json()) // automatically parses request data to JSON 
    6.  
    7. // base route 
    8. app.get("/", function (request, response) { 
    9.   response.send("TODO") // always responds with the string "TODO" 
    10. }); 
    11.  
    12. // base route 
    13. app.post("/", function (request, response) { 
    14.   response.send("TODO") // always responds with the string "TODO" 
    15. }); 
    16.  
    17. app.put("/", function (request, response) { 
    18.   response.send("TODO") // always responds with the string "TODO" 
    19. }); 
    20.  
    21.  
    22. // listen for requests, the process.env.PORT is needed because 
    23. // we are using glitch, otherwise you could have written 80 or whatever 
    24. var listener = app.listen(process.env.PORT, function () { 
    25.   console.log('Your app is listening on port ' + listener.address().port); 
    26. }); 

    我们首先导入了 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

    1. // base route 
    2. app.get("/:user", function (request, response) { 
    3.   response.send(request.params.user)  
    4. }); 
    5.  
    6. // base route 
    7. app.post("/:user", function (request, response) { 
    8.   response.send(request.params.user)  
    9. }); 
    10.  
    11.  
    12. // base route 
    13. app.put("/:user", function (request, response) { 
    14.   response.send(request.params.user)  
    15. }); 

    现在服务器可以响应每一个查询并显示查询的用户名。

    向数据库增加数据

    我们知道 user 是谁了,现在我们想存储一些关于他的信息。

    为了查询数据库,我们会使用 mongodb 库。你可以用以下两个方法安装:

    1. npm install mongodb --save 

    或者如果你使用 Glitch ,你可以切换到 package.json 文件并点击 Add package 按钮。

    我们加载 mongodb 库然后存储 MongoDB URI 到一个变量中:

    1. const mongodb = require('mongodb'); // load mongodb 
    2. const uri = process.env.URI; 

    URI 是很敏感的信息——这是访问数据库所需的一切。最好把 URI 放到一个 .env 文件中,.env 文件中的信息对于其他人是不可见的。

    1. URI=mongodb://admin:PASSWORD@ds111885.mlab.com:11885/medium 

    Glitch 会自动从 .env 文件中加载变量到 process.env 变量。

    数据库的连接是异步的操作,所以我们需要像这样在回调中包装所有服务器设置:

    1. mongodb.MongoClient.connect(uri, function(err, db) { 
    2.   // base route 
    3.   app.get("/:user", function (request, response) { 
    4.     response.send(request.params.user)  
    5.   }); 
    6.  
    7.   // base route 
    8.   app.post("/:user", function (request, response) { 
    9.     response.send(request.params.user)  
    10.   }); 
    11.    
    12.   // base route 
    13.   app.put("/:user", function (request, response) { 
    14.     response.send(request.params.user)  
    15.   }); 
    16.    
    17.   // listen for requests, the process.env.PORT is needed because 
    18.   // we are using glitch, otherwise you could have written 80 or whatever 
    19.   var listener = app.listen(process.env.PORT, function () { 
    20.     console.log('Your app is listening on port ' + listener.address().port); 
    21.   }); 
    22. }) 

    数据库是按集合组织的,集合中包含文档(基本上是 JSON 文件)。所以让我们连接到 User 集合(我们第一次访问的时候会创建)。

    1. mongodb.MongoClient.connect(uri, function(err, db) { 
    2.   const collection = db.collection('users') 
    3.   // ... 

    首先,我们先来操作一下 POST 路由。当我们第一次来添加用户数据时,将会用到该路由。然后我们要用 PUT 路由来更新数据。

    1. app.post("/:user", function (request, response) { 
    2.     // inserts a new document on the server 
    3.     collection.insertOne({ ...request.body, user : request.params.user }, function (err, r) { 
    4.       if (err){ 
    5.         response.send("An error occured")  
    6.       }else{ 
    7.         response.send("All well") 
    8.       } 
    9.     }) 
    10.   }); 

    collection.insertOne 方法给收集器添加了一个新的文档。在这个例子中,每一个用户都将会拥有他自己的文档。

    { ...request.body, user : request.params.user } 利用 扩展操作符 合并通过请求主体和用户通过 URL 提供的数据。

    被存储在收集器其中的文档便是运行结果。

    第二个参数是一个回调,将操作结果简单的通知给用户。

    从数据库获取数据

    我们在服务器上存放了一些数据,现在想从服务器上读取这些数据。我们用 GET 方法来获取。

    1. app.get("/:user", function (request, response) { 
    2.   collection.find({ user : request.params.user }).toArray(function (err, docs) { 
    3.     if (err){ 
    4.       response.send("An error occured")  
    5.     }else{ 
    6.       response.send(docs) 
    7.     } 
    8.   }) 
    9. }); 

    此时,第一个参数是一个过滤器,用来告诉数据库将用户的属性信息文档只发给我们。

    用户信息以数组的形式保存在文档中,因为从理论上讲不止一个文档中保存着用户的属性信息。我们必须避免这种情况的发生。

    文档以数组的形式返回给用户,因为理论上可以有多个具有该用户属性的文档。我们必须确保这种情况不会发生。

    更新数据库数据

    最后而且很重要的是用 PUT 方法更新已存在的用户信息。

    1. // base route 
    2.   app.put("/:user", function (request, response) { 
    3.     collection.updateOne({ user : request.params.user }, 
    4.                          {$set:{ ...request.body, user : request.params.user }}, 
    5.                          function (err, r) { 
    6.       if (err){ 
    7.         response.send("An error occured")  
    8.       }else{ 
    9.         response.send("All well") 
    10.       } 
    11.     }) 
    12.   }); 

    第一个参数是一个过滤器,与 GET 方法的第一个参数类似。

    第二个参数是更新文档请求—你能获取更对信息从 这里 。在我们的例子中,我们告诉数据库将用户传递的数据与已存在的数据合并。

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

    最后

    对于数据库和后台编程来说这只是刚刚开始,但是这足以让你开始个人项目。

    之后我可能会写一些关于身份验证的文章,在此之前,请不要在里边存储一些比较敏感的数据。

    你可以修改这个完整的项目 在这 ,你将需要有一个自己的数据库,如果你还不会创建,请回到 配置数据库 部分。

    如果你觉得这篇文章还不错,请给它一些掌声让更多的人看到它。谢谢!

  • 相关阅读:
    JavaScript——引用类型
    react+express+mongodb搭建个人博客
    JavaScript——变量及其作用域
    CSS——盒子模型
    CSS——浮动及清除浮动
    hexo博客分支教训
    使用Node.js+Express 简易开发服务端实例
    发布Nuget包命令
    当心引用类型的“坑”
    sqlcmd相关
  • 原文地址:https://www.cnblogs.com/syncnavigator/p/10198344.html
Copyright © 2011-2022 走看看