2017-10-19 4 views
1

私はexpress/nodeプロジェクトでgunを使用しようとしていますが、エンドポイントを/dbとしてマウントしたいとします。Gunをエクスプレスルートとして使用するには?

var express = require('express'); 
var Gun = require('gun'); 

var app = express(); 
var port = 8080; 

var gun = new Gun({ 
    file: './data.json' 
}); 

// mount the gun db server 
app.get('/db', gun.router); 

// regular express route 
app.get('/', function(req, res) { 
    res.send('other stuff...'); 
}); 

// start the server 
app.listen(port, function() { 
    console.log('Web server listening on port ' + port); 
}); 

任意の提案:私は、次のコードは動作しますが、Route.getは()コールバック関数エラーを必要となって続けるだろう期待していましたか?

答えて

3

ドハティ!

GUNはエクスプレスで使用できますが、高速ルートではありません。例えば、最初の特急が搭載されたシンプルな銃サーバ上に行くことができます:

<script src="http://YOURSERVER.com/gun.js"></script> 
<script> 
    var gun = Gun('http://YOURSERVER.com/gun'); 
    gun.get('key').get('hello').put('world!'); 
    gun.get('key').get('hello').on(function(data){ console.log(data) }); 
</script> 

GUNがではありません。

var express = require('express'); 
var Gun = require('gun'); 

var app = express(); 
app.use(Gun.serve).use(express.static(__dirname)); 

var server = app.listen(80); 
Gun({file: 'data.json', web: server}); 

https://github.com/amark/gun/blob/master/examples/express.js

GUNのAPIはで、ブラウザで利用できるようになりましたを急行ルートとして利用できます。例えば、これはを動作しません:

http://YOURSERVER.com/data/key/hello?put=world! 

なぜ?あなたはそのAPIとして明示してRESTやCRUDルートを使用する場合は、リアルタイム機能を失う

GUNはその後、リアルタイムデータベースです。つまり、独自のカスタム・ロング・ポーリング・インプリメンテーションを作成する必要があります。これは、明示的なルートを持つポイントを打ち負かします。

私は理解していますが、GUN用のREST APIまたはCRUD APIがまだ必要ですか?

銃をプロキシするHTTPルートを作成してはいけません。ここにいくつかの擬似コードがあります。あなたがそれを構築するなら、他の人がそれを楽しむことができるようにNPM上のオープンソースモジュールにしてください!

// this is pseudocode!!! 
app.get('/data', (req, res) => { 
    path(req).val(data => res.send(data)) 
}); 

app.put('/data', (req, res) => { 
    path(req).put(req.param.put, ack => { 
    res.ack? 0 : res.ack = res.send(ack) 
    }) 
}); 

var path = (req) => { 
    var ref = gun; 
    req.path.split('/').forEach(key => ref = ref.get(key)); 
    return ref; 
} 

ビルドしたらお知らせください。いつものように、コミュニティchatroom is friendlyとアクティブ。そこに助けを求めて、ここで質問してください。これをSOの質問にしてくれてありがとう!

+0

マーク、詳細な回答をいただきありがとうございます!私が高速ルートでガンをラップしたかった理由は、高速ミドルウェアを使用して初期接続要求を傍受し、401で認証されていないユーザーを拒否することができたからです...私はもちろん、一緒にcobbleしてもオープンソースです:) –

+0

セキュリティ/許可の許可の理由からこれを実行したい場合、それは非常に異なる主題です。 GUNのSEA(Security、Encryption、Authorization)をチェックしてください。いくつかの情報はhttps://github.com/amark/gun/wiki/authです。それはアルファですが、私はまだ答えられていないいくつかの他のStackOverflowの質問があります - しかし、追加してください! – marknadal

関連する問題