【オープンソース】Westore Cloudリリース-バックエンドなしSQLなしDBAなしjavascriptクラウドウィジェットの開発のみ

7325 ワード

Westore Cloud-ステルスクラウド、NoBackEnd、NoSql、HiddenDB
良いデザインはデザインの存在を感じない
開発ウィジェットですが、バックエンドはありません!運維がない!DBAはありません!ドメイン名がありません!証明書がありません.お金がない!元気がない!
大丈夫javascriptでいいわ
Github
https://github.com/dntzhang/westore
小プログラムクラウド開発の概要
開発者はクラウドを使って微信ウィジェット、ゲームを開発することができ、サーバーを構築する必要がなく、クラウド能力を使用することができる.
クラウド開発は開発者に完全なクラウドサポートを提供し、バックエンドとメンテナンス概念を弱め、サーバーを構築する必要がなく、プラットフォームが提供するAPIを使用して核心業務開発を行い、迅速なオンラインと反復を実現することができる.同時に、この能力は開発者がすでに使用しているクラウドサービスと互いに互換性があり、反発しない.
現在、3つのインフラストラクチャサポートを提供しています.
  • クラウド関数:クラウドで実行されるコード、微信私有プロトコル天然認証、開発者は自分の業務論理コード
  • を書くだけである.
  • データベース:ウィジェットのフロントエンドでもクラウド関数でも読み書き可能なJSONデータベース
  • ストレージ:ウィジェットのフロントエンドでクラウドファイルを直接アップロード/ダウンロードし、クラウド開発コンソールでの可視化管理
  • ウィジェットクラウドの詳細については、公式ドキュメントをクリックしてください.
    Westore Cloudの概要
    Westore Cloudは、小プログラムクラウドベースのデータベース能力で、開発者にデータベースの存在(ステルスクラウド)を感知させず、ローカルデータ、ローカルデータロジック、ローカルデータの流れに専念し、簡単なpull、push、add、removeを通じてローカルデータとクラウドデータベースを同期させる必要があります.データベース関連の公式ドキュメントはここをクリックできます.アーキテクチャ図は次のとおりです.
    典型的なData Firstアーキテクチャ設計では、中小規模プロジェクトではModelsとAdapterの2つのモジュールを削除できます.Model firstのアーキテクチャと比較できます.
    Model firstのアーキテクチャでは、ストレージを永続化する必要がなければ、Databaseを削除してModelsだけを残すことができます.Modelsはレンダリングとは関係なく、モデルの抽象とモデル間の論理に専念し、具体的にはWeb、アンドロイド、IOS、Flash、またはWPFがModelsの心配すべき質問に属していない.
    Westore Cloudプロパティ
  • ウィジェット直結データベース
  • データベースデータ項目関数拡張
  • 極めて簡単なAPI設計(pull push add remove)
  • プログラミング言語(javascript)作成フロントエンド、バックエンド、mongodb
  • のみ必要
  • 開発者はデータとデータの論理(store)に専念するだけで、ステルスなデータベース同期機能
  • 遅延のない設計(ローカルリフレッシュビューを更新してからsync db、最後のdiffローカル更新ビューを更新する)
  • クイックスタート
    新規コレクション
    マッピングストアの定義
    上に作成したコレクション名をインストールしてstoreのdataを作成します.
    export default {
      data: {
        //user    db   collectionName
        'user': [],
        //   collection       
        'product': []
      },
      env:'test-06eb2e'
    }

    上のenvはクラウドコンソールの環境IDに対応しています.
    新しいテストデータ
    addメソッドを使用して集合userにデータを追加します.
    this.store.add('user', {
      name: 'dntzhang',
      city: '  ',
      age: 22,
      gender: 1
    }).then((res) => { })

    addメソッドを使用してコレクションproductにデータを追加します.
    this.store.add('product', {
      address: {
        province:'   ',
        city:'   ',
      },
      agent: [ '    ', '     ', '    ']
    })

    データベースの各メソッドの拡張
    export default {
      data: {
        'user':[],
        'product': []
      },
      methods:{
        //       collection       
        'product':{
          'agentString':function(){
            //this.agent    product     agent  
            return this.agent.join('-')
          }
        }
      },
      env:'test-06eb2e'
    }

    上記の拡張方法では、productテーブルの各項目を巡回する際に、ローカルの最初のデータを示すagentStringなどのagentStringプロパティを直接使用してビューにバインドできます.
    {{product[0].agentString}}

    データを引き出す
    this.store.pull('user').then(res => {
      this.store.data.user = res.data
      this.update()
    })

    ビューへのデータのバインド
    
           
         :{{user[0].name}}
         :{{user[0].age}}
         :{{user[0].city}}
         :{{user[0].gender===1?' ':' '}}
          (           )
        :{{product[0].address.province}}
        :{{product[0].address.city}}
           :{{product[0].agentString}}
       
       
       
        
       
    

    データの変更
    this.store.data.user[0].name = 'dntzhang' + Math.floor(Math.random() * 100)
    this.store.push().then((res) => {
      console.log('        ')
    })
    pushメソッドはupdate local+update cloudに等しい.したがって、ローカルビューだけでなく、クラウドデータベースも同期して更新され、更新コールバックはthenで実行されます.
    高度なネストされたプロパティの正確な更新をサポートします.
    this.store.data.product[0].address.city = '   '
    this.store.data.product[0].agent[0] = '  '
    this.store.data.product[0].agent[1] = 'QQ'
    this.store.data.product[0].agent[2] = '   '
    this.store.push()

    更新後:
    データの削除
    const item = this.store.data.user.splice(index, 1)[0]
    this.update() //         
    this.store.remove('user', item._id)  //       

    新規データ
    const user = {
      name: 'new user' + this.store.data.user.length,
      age: 1,
      city: '  ',
      gender: 2
    }
    this.store.data.user.push(user)
    //        
    this.update() 
    //       
    this.store.add('user', user)

    新しいエントリ・データが変更され、クラウド・データベースに同期する必要がある場合は、次のように設定します.id、すなわち最後の行のコードを次のように変更します.
    this.store.add('user', user).then((res) => {
      //  _id,         push
      user._id = res._id
      this.update()
    })

    完全なDEMOを追加するには、ここをクリックしてください.
    API
    this.store.pull(collectionName, [where])
    クラウドデータベース集合のJSONデータを引き抜く
    パラメータ
    名前
    オプション
    を選択します.
    説明
    collectionName
    なければならない
    文字列
    コレクション名
    where
    必要ない
    JSON Object
    18歳{age:18}などのクエリー条件
    より多くのwhereのクエリー条件を構築するAPIは、ここをクリックすることができます.
    戻り値
    Promiseオブジェクトのインスタンスを返します.
    ≪インスタンス|Instance|emdw≫
    18歳のユーザーを検索:
    this.store.pull('user', {age: 18}).then(res => {
      this.store.data.user = res.data
      this.update()
    })

    this.store.push()
    ローカルJSONからクラウドデータベースへの同期
    戻り値
    Promiseオブジェクトのインスタンスを返します.
    this.store.data.user[0].name = 'dntzhang'
    this.store.data.product[0].address.city = '   '
    this.store.data.product[0].agent[1] = 'QQ'
    this.store.data.product[0].agent[2] = '   '
    this.store.push().then((res) => {
      console.log('      !')
    })

    this.store.add(collectionName, data)
    JSONデータをデータベースに追加
    パラメータ
    名前
    オプション
    を選択します.
    説明
    collectionName
    なければならない
    文字列
    コレクション名
    data
    なければならない
    JSON Object
    データベースに追加されたデータ・アイテム
    戻り値
    Promiseオブジェクトのインスタンスを返します.
    const user = {
      name: 'new user' + this.store.data.user.length,
      age: 1,
      city: '  ',
      gender: 2
    }
    this.store.data.user.push(user)
    this.update()
    this.store.add('user', user).then((res) => {
      //  _id
      user._id = res._id
      this.update()
    })

    this.store.remove(collectionName, id)
    idに基づいてデータベースのデータを削除する
    パラメータ
    名前
    オプション
    を選択します.
    説明
    collectionName
    なければならない
    文字列
    コレクション名
    id
    なければならない
    文字列
    対応するデータベースで自動的に生成される_idフィールド
    戻り値
    Promiseオブジェクトのインスタンスを返します.
    const item = this.store.data.user.splice(index, 1)[0]
    this.update()
    this.store.remove('user', item._id)

    げんり
    JSON Diff Resultデータベース更新要求への移行
    diffToPushObj({ 'user[2].name': { cc: 1 }, 'user[2].age': 13, 'user[1].a.b': { xxx: 1 } })

    戻り値:
    { 'user-2': { 'name': { 'cc': 1 }, 'age': 13 }, 'user-1': { 'a': { 'b': { 'xxx': 1 } } } }

    ここで、「user-2」.split('-')の後にDBの集合名userが得られ、数字2はローカルデータの3番目の項目を表す.
    Star & Fork
    https://github.com/dntzhang/westore
    License
    MIT @dntzhang