ServiceWorkerハッカソンにて
@mizchi です
- Isormorphic Web Application Framework
- serviceworker内にexpress(nodeのwaf)いてほしくない…?
- オフライン環境でキャッシュを返す
- サーバーをスキップしてパフォーマンス向上
- テスト用モックサーバー
- ServiceWorker未対応ブラウザのフォールバック
- 完全にexpressのAPIを模倣するのきつすぎ
- 規約ベースのrouter書いて、それをどの環境でも動かせるようにする方向に
- サビ残
- github.com/mizchi/sabizan
routes.coffee
module.exports = (router) ->
router.get '/users/:id', (req) ->
{id: req.params.id}
router.post '/post', (req) ->
new Promise (done) ->
setTimeout ->
done {type: 'this is post:' + req.body.prop}
, 100
Sabizan = require 'sabizan'
self.onfetch = (event) ->
if proxy.isHandleScope event.request.url
proxy.wrapFetchEvent(event)
sabizan = new Sabizan.ServiceWorker location.origin+'/api'
require('./routes')(sabizan)
browserifyして使う
app = express()
Sabizan = require '../src/index'
proxy = new Sabizan.Server app, '/api'
require('./routes')(proxy)
今日作ったのは主にここ
基本的にはexpress準拠
req.params req.body req.query
どっちでも同じように動く。 地味です。
- PouchDBと一緒に使えるようにする
- CouchDBとレプリケーションできるIndexedDbラッパー
サーバー側に副作用があるときにPush API で通知してレプリケーション
- APIごとに選択的に何がレスポンスに応えるか選べるようにする
- 副作用が起きる系の操作はServiceWorkerでPOSTできないようにするとか
DBスタブして入力と出力の対応だけみるテストすればすごいテストしやすそう
DBとレプリケーション通知は夢があるのであとでやるぞ!
/etc/hosts をどうにかして自分と無関係なサイトに対して勝手にserviceworker登録してリクエストをスタブするの楽しそうな気がしてきた