Node.js 如何使用枪支作为快速路线?

Node.js 如何使用枪支作为快速路线?,node.js,express,gun,Node.js,Express,Gun,我试图在express/node项目中使用gun,但是我希望将端点装载为/db。我曾希望以下代码能够正常工作,但仍能获得路由。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 ser

我试图在express/node项目中使用gun,但是我希望将端点装载为
/db
。我曾希望以下代码能够正常工作,但仍能获得路由。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);
});
有什么建议吗?

多尔蒂

枪可以和快车一起使用,但不是快车路线。例如,让我们先看一下安装了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});
()

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是一个实时数据库,如果使用带有express的REST或CRUD路由作为其API,则将失去实时功能。这意味着您将不得不编写自己的定制长轮询实现,这与使用快速路由的目的背道而驰

我明白,但我还是想要一个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;
}

让我们知道,如果你建立它!和往常一样,社区是积极的。在那里寻求帮助,在这里提出问题。谢谢你提出这个问题

马克,非常感谢你的深入回答!我想将Gun封装在快速路由中的原因是,我可以使用快速中间件拦截初始连接请求,并使用401。。。当然,无论我拼凑什么,我都会开放源代码:)啊,如果你出于安全/授权许可的原因想这样做,那么这是一个非常不同的主题。检查SEA(安全,加密,授权)的枪,一些信息在这里:。这是在阿尔法虽然,还有一些其他的StackOverflow问题,我还没有能够回答-但请添加更多!
// 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;
}