1. 程式人生 > >Parse Server匯入excel資料

Parse Server匯入excel資料

文章允許轉載,請註明來源:https://blog.csdn.net/feiniao8651/article/details/83015540

facebook的parse和google的firebase類似,都屬於serverless的開發工具。facebook已經關閉了parse商業服務,並將server部分的程式碼開源。我們可以在自己伺服器上搭建paese server服務。parse server資料儲存在mongodb中,通過parse dashboard可以看到相應的資料內容。

問題

1嘗試dashborad的匯入

因為有一些資料是之前儲存在excel中的,要把這些資料存到資料庫中,由於量比較大,一個個輸入不現實。首先查看了parse dashboard的頁面,發現並沒有提供資料匯入的功能,而且從github上issue中開發者的回覆來看,短期內他們也不會在dashboard中增加資料匯入的功能。

2嘗試用資料庫匯入的方式。

資料庫的資料匯入匯出是大家在開發中常用到的功能,基本上所有成熟的資料庫都提供了資料匯入匯出的支援。mongodb也可以匯入資料,mongoimport是mongodb的匯入資料命令,支援json和csv格式的資料。excel倒是可以很容易的轉存為csv格式,執行完匯入命令,發現在dashboard中顯示的匯入資料ObjectId都是類似於"5bbf0e0e27c0329f92653cd9"的格式(注:需要修改mongodb的_SCHEMA表之後才能在dashboard中看到匯入的資料,這個表相當於是記錄了parse server處理的資料)。看到這個格式的變化,也沒在意,以為這是屬於正常。但是發現在parse中並不能訪問這些匯入的資料,也就是說parse不支援這種通過資料庫直接匯入的資料。

解決方法

參考github討論中給的一個方式實現了資料匯入。方法原理很簡單,就是直接把json資料傳送到server端,然後在server端做一個數據的儲存操作。不過對於海量的資料,可能會超出http協議資料長度的限制,不建議用這種方法。下面就直接貼程式碼實現了。

步驟1 parse server端實現import介面

Parse.Cloud.define("import", function (request, response) {
  var className = request.params.className;
  var rows = request.params.rows;
  
  var MyClass = Parse.Object.extend(className);

  var promises = [];
  for (var i = 0; i < rows.length; i++) {
    var myClassObject = new MyClass();

    for (var column in rows[i]) {
      myClassObject.set(column, rows[i][column]);
    }

    promises.push(myClassObject.save());
  }

  Parse.Promise
    .when(promises)
    .then(
      function () {
        response.success('Successfully imported ' + i + ' rows into ' + className + ' class');
      },
      function (error) {
        response.error('Import failed: ' + error);
      });
});

步驟2 本地使用csvtojson轉換資料後傳送到server端import介面

const csvFilePath='data.csv'
const dataClassName='MyTask'
const csv=require('csvtojson')
var Parse=require('parse/node')

var appId='myapp'

Parse.initialize(appId)
Parse.serverURL='http://127.0.0.1:1337/parse/'

csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
      let data = {className: dataClassName, rows: jsonObj}
      console.log(jsonObj)
      Parse.Cloud.run('import', data).then(function(response) {
              console.log(response);
      });
})

之後呼叫本地的js程式就能將csv檔案中的資料儲存到parse server的資料庫裡了,可以看到ObjectId也是正常的格式。

參考:
Data import
Example of importing data with cloud functions
csvtojson