2017-09-15 149 views
0

最后几天我试着去得到节点JS运行一个简单的FTP服务器。节点JS - FTP-SRV - 简单的FTP服务器实例需要

我发现了一个名为“FTP-SRV”有一些文件在这里包: https://www.npmjs.com/package/ftp-srv

启发由代码snipptes那里,我写了一个小脚本:

const FtpSvr = require ('ftp-srv'); 

const hostname = '0.0.0.0'; 
const port = 1111 

const ftpServer = new FtpSvr ('ftp://' + hostname + ':' + port, 
{ anonymous: true, greeting : [ "Hello Jong", "Wie gehts?" ] }); 

ftpServer.on ('login', (data, resolve, reject) => 
{ 
    console.log ('data: ' + data); 
    console.log ('resolve: ' + resolve); 
    console.log ('reject: ' + reject); 

}); 

ftpServer.on ('client-error', (connection, context, error) => 
{ 
    console.log ('connection: ' connection); 
    console.log ('context: '  context); 
    console.log ('error: '   error); 
}); 


ftpServer.listen() 
.then(() => 
{ 
    console.log (`Server running at http://${hostname}:${port}/`); 
}); 

我可以启动脚本与“节点ftpserver.js”,它运行没有问题。 如果我使用FTP客户端软件连接它似乎连接,但等待“欢迎消息”,并在那一点挂起。

我公司提供的“问候语” -Variable但文本不会发送到客户端。

我搜索了很多在谷歌,但无法找到的“FTP-SRV”任何工作的例子。

我想,我必须填写一些代码的点是在这里:

ftpServer.on ('login', (data, resolve, reject) => 
{ 
    // HERE 
}); 

这将帮助我很多,如果有人可以提供一些示例代码来获得一个工作的客户端连接,并克服问候消息。

---编辑---

从jcaron的建议帮了不少忙,林又进了一步了。这是我的变化:

[...] 
ftpServer.on ('login', (data, resolve, reject) => 
{ 
    resolve ({ root: '/home/peter/apps/ftpfiles' }); 
}); 
[...] 

当我现在有一个客户端连接,客户端尝试读取远程目录。 3次尝试后,客户端得到超时。

好像客户端访问斜面目录“/家庭/彼得/应用/ ftpfiles”。我可以说它存在并具有用户的读/写权限,我启动了我的“ftpserver.js”-Script。

我尝试了一些东西用FS-对象,而不是根:[DIR],但总是看到相同的行为。

任何人都可以帮忙吗?

---编辑---

除了简单地改变

const hostname = '0.0.0.0'; 
#to local address: 
const hostname = '192.x.y.z'; 

,它为我工作。

回答

3

当您收到login事件时,您需要根据您决定什么样的认证结果调用resolvereject

如果考虑登录信息是正确的,叫resolve,它传递的对象与相关细节,例如:

resolve({root: '/path/to/files/accessible/via/ftp'}) 

另外请注意,如果你是在专用网络上进行本地测试,您应该可能使用本地IP或127.0.0.1作为主机名。 0.0.0.0使它使用外部IP地址。

+0

帮了很多,非常感谢!现在我挂在客户端没有得到目录列表。我更新了我的帖子。 – Peter

+0

客户端与服务器在同一台计算机上,还是在同一个局域网上?在第一种情况下将“0.0.0.0”地址更改为“127.0.0.1”,或者在任何情况下都将实际本地IP更改。 – jcaron

+0

我已经更改为127.0.0.1。忘了提及。但是,当我改变到本地地址的时候:-))。谢谢你的帮助! – Peter