最后几天我试图在Node JS中运行一个简单的ftp服务器。
我找到了一个名为" ftp-srv"这里有一些文档: https://www.npmjs.com/package/ftp-srv
通过代码片段启发我写了一个小脚本:
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次尝试后,客户端会超时。
似乎客户端无法访问目录' / home / peter / apps / ftpfiles'。我可以说它存在并且具有用户的读/写权限,我启动了我的" ftpserver.js" -Script。
我用fs-object而不是root尝试了一些东西:[dir],但总是看到相同的行为。
有人可以帮忙吗?
---编辑---
另外只需更改
const hostname = '0.0.0.0';
#to local address:
const hostname = '192.x.y.z';
它对我有用。
答案 0 :(得分:3)
当您收到login
事件时,您需要根据您确定的身份验证结果来调用resolve
或reject
。
如果您认为登录信息正确,请致电resolve
,并将相应详细信息传递给对象,例如:
resolve({root: '/path/to/files/accessible/via/ftp'})
另请注意,如果您在专用网络上进行本地测试,则应该使用本地IP或127.0.0.1
作为主机名。 0.0.0.0
使其使用外部IP地址。