我有一个GET和POST路由的设置,想法是POST到路由触发事件,GET路由是服务器发送的事件流,每次触发POSTed事件时触发...但是,我我觉得我做错了,因为事件听众似乎经常被添加,尽管只有一个事件流订阅者......我做错了什么?
var events = require('events'),
EventEmitter = events.EventEmitter,
rr = new EventEmitter();
app.post('/api/:boardname/remoterefresh', function(req, res){
var boardname = req.param('boardname'),
data = new Date().getTime();
rr.emit("refresh-"+boardname, data)
res.json({data: data})
});
app.get('/api/:boardname/remoterefresh', function(req, res){
var boardname = req.param('boardname')
rr.on("refresh-"+boardname, function(data){
setTimeout(function(){
res.write('data: '+data+'\n\n');
}, 1000)
});
req.socket.setTimeout(Infinity);
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.write('\n');
req.on('close', function(){
console.log('closed')
rr.removeListener("refresh-"+boardname, function(){
//
})
})
})
Run Code Online (Sandbox Code Playgroud) 我希望允许用户直接从 sftp 服务器下载文件,但在浏览器中。
我找到了读取文件并回显字符串的方法(使用 ssh2.sftp 或 phpseclib 连接),但我需要下载,而不是读取。
另外,我看到的解决方案建议从 sftp 服务器下载到 Web 服务器,然后使用 readfile() 从 Web 服务器到用户的本地磁盘。但这意味着两次文件传输,如果文件很大,我想这会很慢。
可以直接从sftp下载到用户磁盘吗?
为任何回应干杯!
我需要在每个ember.js视图渲染后运行一个函数.我最初的想法是在页面准备好后运行我的函数,但任何视图更改都不受我的函数中DOM操作的影响.有没有一种方法可以在每次渲染视图或重新渲染视图时绑定到事件(或导致触发器)?
javascript ×2
bind ×1
download ×1
ember.js ×1
event-stream ×1
eventemitter ×1
express ×1
jquery ×1
node.js ×1
php ×1
phpseclib ×1
sftp ×1
triggers ×1