如何使用Gun作为快速路线?

时间:2017-10-19 14:01:31

标签: node.js express gun

我正在尝试在快速/节点项目中使用枪,但是我想将端点挂载为/db。我曾希望以下代码能够正常工作,但不断获得 Route.get()需要回调函数错误:

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);
});

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

多赫蒂!

GUN可以和express一起使用,但它不是快速路线。例如,让我们首先介绍一个安装了express:

的简单枪支服务器
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现已在浏览器中提供:

<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 可用作快速路线。例如,这不起作用

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

为什么?

GUN是​​实时数据库,如果您使用带有express作为其API的REST或CRUD路由,那么您将失去实时数据。这意味着你必须编写自己的自定义长轮询实现,这违背了快速路由。

我明白了,但我仍然想要一个用于GUN的REST或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并且活跃。在那里寻求帮助,并在这里提问。感谢您提出这个问题!