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