ArangoDB(七)——node+express+arangojs

Node.js 操作 mongoDB常用的是mongoose,那麼Node.js 操作 ArangoDB的是 ❓ orango ❓ arangojs ❓關於orango在上一節已經講過,所以本節來講述Node.js 利用 arangojs 操作 ArangoDB( CRUD )。 👇👇👇

Arangojs

ArangoJS —— The official ArangoDB low-level JavaScript client。

Preparations

  • express搭建服務

  • 使用的數據庫:_system

  • 使用的集合 : users

  • 安裝arangojs : npm install arangojs --save

  • 服務與路由分開進行

    • 目錄結構
      在這裏插入圖片描述
    • 🥑 services
      • 新建文件user.js(services文件夾–>user.js文件)
      • 代碼
        let arangojs = require('arangojs');
        let db = new arangojs.Database('http://127.0.0.1:8529');
        db.useDatabase("_system");
        db.useBasicAuth("root", "");
        
        let collection = db.collection('users');
        
        module.exports = {
            // 獲取數據
            
            // 增加數據
        
        	//修改數據
        
        	//刪除數據
        }
        
    • 🍐routes
      • 新建文件user.js(routes文件夾–>user.js文件)

      • 代碼

        let express = require('express');
        let router = express.Router();
        
        let service = require("../services/users"); 
        
        router.get('/getUser', (req, res) => {
        	。。。。。。
        	
          //獲取數據的相關操作
        });
        
        router.post('/addUser', (req, res) => {
        	。。。。。。
        	
          //增加數據的相關操作
        });
        

準備工作完成後我們來看下具體的實現吧 ✍️ ✍️ ✍️

CRUD

  • C

    • 🍐 routes(user.js

      router.post('/addUser',async (req, res)=> { 
        let dataParam = {
          "name": req.body.name,
          "age": req.body.age
        };
      
        let result =await service.addUser(dataParam);    //在service中執行addUser()
        return res.json(result);
      });
      
    • 🥑service(user.js

      module.exports = {
      
          // 增加數據
          async addUser(dataParam) {  //dataParam是routes中傳入的參數
              let data = await collection.save(dataParam);
              return data;
          }
      }
      
    • 效果

      • Arangodb
        在這裏插入圖片描述
      • postman
        在這裏插入圖片描述

      爲什麼呢❓🤔🤔🤔我們一起來看個知識點:documentCollection.save

    • documentCollection.save()

      • 語法async documentCollection.save(data, [opts]): Object

        使用給定的數據創建一個新文檔,並返回一個包含文檔元數據(_id,_key和_rev屬性)的對象。

      • Arguments

        • data: Object | Object[]

          新文檔的數據,可以包含_key。

        • opts: Object (optional)

          如果設置了opts,則它必須是具有以下任何屬性的對象:

          • returnNew: boolean (Default: false)

            如果設置爲true,則另外在結果的new屬性下返回完整的新文檔。

          • returnOld: boolean (Default: false)

            如果設置爲true,則在結果中的屬性old下另外返回完整的舊文檔。

          • waitForSync: boolean (Default: false)

            等待文檔同步到磁盤。

      迴歸正題,針對上面在postman中測試返回的數據中不顯示nameage問題,將用上面提到的opts屬性中的 returnNew來解決,services(user.js)中的代碼如下所示:

      • 代碼

        module.exports = {
        		
            // 增加數據
            async addUser(dataParam) {  //dataParam是routes中傳入的參數
               let opts = { returnNew: true };
               let data = await collection.save(dataParam,opts);
               return data;
            }
        }
        
      • 效果圖

      現在數據中是返回了nameage,但是這樣的話_id,_key,_rev字段會出現兩次,數據有點冗餘,那還有解決辦法嗎❓當然有,一起來看看吧(services(user.js)):👇👇👇

      • 代碼

        module.exports = {
            // 增加數據
            async addUser(dataParam) {
                 let data = await collection.save(dataParam);
                 let doc = await collection.document(data);
                 return doc;
            }
        }
        
      • 效果圖

  • 🔍R

    • collection.all()
      • 語法async collection.all([opts]): Cursor

        執行查詢以獲取集合中的所有文檔。返回查詢結果的新Cursor實例。

      • Arguments

        • opts: Object (optional)
      • 🌰

        • 🍐 routes(user.js)

          router.get('/getUser', async (req, res) => {
            let list = await service.getAllUsers();
            return res.json(list);
          });
          
        • 🥑services(user.js)

          // 獲取數據
          let value =await collection.all(); 
          return value._result;
          
        • 效果圖 在這裏插入圖片描述

  • ✍️U

    • collection.update()
      • 語法async collection.update(documentHandle, newValue, [opts]): Object

        使用給定的documentHandle和給定的newValue更新(合併)文檔的內容,並返回一個包含文檔元數據的對象。

      • Arguments

        • documentHandle: string

          可以是集合中文檔的_id或_key,也可以是文檔(即具有_id或_key屬性的對象)。

        • newValue: Object

          文檔的新數據

        • opts: Object (optional)

      • 🌰

        • 🍐 routes(user.js)

          router.post('/updateUser',async (req, res)=> { 
            let dataParam = {
              "_key":req.body._key,
              "name": req.body.name,
              "age": req.body.age
            };
          
            let result =await service.updateUsers(dataParam);    //在service中執行addUser()
            return res.json(result);
          });
          
        • 🥑services(user.js)

          // 修改數據
          async updateUsers(param){
              let dataUpdate=await collection.update(param._key,param);
              let data=await collection.document(dataUpdate);
              return data;
          }
          
        • 效果圖
          在這裏插入圖片描述

  • D

    • collection.remove()
      • 語法async collection.remove(documentHandle, [opts]): Object

      • Arguments

        • documentHandle: string

          可以是集合中文檔的_id或_key,也可以是文檔(即具有_id或_key屬性的對象)

        • opts: Object (optional)

      • 🌰

        • 🍐 routes(user.js)

          router.delete('/removeUser',async (req, res)=> { 
            let _key=req.body._key;
            let result =await service.removeUsers(_key);    //在service中執行addUser()
            return res.json(result);
          });
          
        • 🥑services(user.js)

           // 刪除數據
              async removeUsers(param){
                  let dataRemove=await collection.remove(param);
                  return dataRemove;
              }
          
        • 效果圖
          在這裏插入圖片描述

學習資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章