如何使用Gun作为快速路线?
How to use Gun as an express route?
我正在尝试在 express/node 项目中使用 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);
});
有什么建议吗?
多尔蒂!
GUN可以和express一起使用,但是不是express路线。例如,让我们先看一个简单的安装了 express 的 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 现在可以在浏览器中访问:
<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 是一个实时数据库,如果您使用 REST 或 CRUD 路由,并以 express 作为其API,那么您将失去实时能力。这意味着您将不得不编写自己的自定义长轮询实现,这违背了拥有快速路由的意义。
我明白了,但我仍然想要 GUN 的 REST 或 CRUD API?
创建代理 gun 的 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 和活跃。在那里寻求帮助,在这里提问。感谢您提出这个问题!
我正在尝试在 express/node 项目中使用 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);
});
有什么建议吗?
多尔蒂!
GUN可以和express一起使用,但是不是express路线。例如,让我们先看一个简单的安装了 express 的 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 现在可以在浏览器中访问:
<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 是一个实时数据库,如果您使用 REST 或 CRUD 路由,并以 express 作为其API,那么您将失去实时能力。这意味着您将不得不编写自己的自定义长轮询实现,这违背了拥有快速路由的意义。
我明白了,但我仍然想要 GUN 的 REST 或 CRUD API?
创建代理 gun 的 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 和活跃。在那里寻求帮助,在这里提问。感谢您提出这个问题!