用于數據同步的統一通信接口:Mesh
Mesh是一個統一接口用于數據源之間的通信,不管它是你的API,mongodb, pubnub, webrtc, socket.io, redis, 或本地存儲。輕松構建高級的功能,例如離線模式,實時數據,回滾等。
Mesh是完全可定制的,并且不關心數據源的內部是如何工作的。您可以輕松地構建自己的API適配器來實現與其它數據源進行交互。
Here's a basic example of how you might implement an API that caches temporarily to local storage:
var mesh = require("mesh"); var http = require("mesh-http"); var localStorage = require("mesh-local-storage"); // local storage cache - keep stuff for one minute max var cache = localStorage({ ttl: 1000 * 60 }); var api = http({ prefix: "/api" }); // pipe all persistence operations to the cache api(mesh.op("tail")).pipe(mesh.open(cache)); // the DB we'll use, return the first result returned, and // only pass 'load' operations to the cache var db = mesh.first(mesh.accept("load", cache), api); db(mesh.op("insert", { collection: "people" // path is automatically resolved from the collection param, // but you can easily override it. path: "/people", // POST is resolved from the operation name, but it's // also overridable method: "POST", data: { name: "john" } })).on("data", function(personData) { // load the person saved. This should result in a cache // hit for local storage. Also note that the HTTP path & method // will automatically get resolved. db(mesh.op("load", { collection: "people", query: { name: person.name } })). on("data", function(personData) { // do stuff with data }); });
Highlights
- Streamable interface.
- Works with any library, or framework.
- Works on any platform.
- Tiny (11kb).
- Works nicely with other stream-based libraries such as highland.
- Isomorphic. Easily use different databases for different platforms.
- Easily testable. Stub out any database for a fake one.
- Simple design. Use it for many other things such as an event bus, message-queue service, etc.
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!