javascript - Node js - ftp-srv - 需要简单的 ftp 服务器示例

标签 javascript node.js

最近几天我试图在 NodeJS 中运行一个简单的 ftp 服务器。

我在这里找到了一个名为“ftp-srv”的包和一些文档: https://www.npmjs.com/package/ftp-srv

受到代码片段的启发,我写了一个小脚本:

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

const hostname = '0.0.0.0';
const port = 1111

const ftpServer = new FtpSrv ( '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}/` );
});

我可以用“node 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”脚本的用户的读/写权限。

我尝试了一些使用 fs-object 而不是 root:[dir] 的东西,但总是看到相同的行为。

谁能帮忙?

--- 编辑---

另外简单的改

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

它对我有用。

最佳答案

当您收到login 事件时,您需要根据您决定的身份验证结果调用resolvereject .

如果您认为登录信息是正确的,调用resolve,传递一个包含相关细节的对象,例如:

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

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

关于javascript - Node js - ftp-srv - 需要简单的 ftp 服务器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234845/

相关文章:

javascript - smoothscroll.init();不工作。出现错误

javascript - 清除 HTML 中的单个表单字段

javascript - 为什么递归会反向发生

javascript - 如何在 Javascript 中访问 JSON 对象?

node.js - 无论测试失败,Mocha 中的钩子(Hook)都会运行吗?

javascript - 部署在heroku上的angularjs应用程序web.js结构

javascript - 从 OrderedMap 中删除元素并保持其顺序

javascript - 使用 Canvas 外解决方案时,如何使固定标题与 body 的其余部分保持一致?

node.js - 用于授权从 React Native 应用程序到 Node 服务器的 API 调用的推荐策略是什么?

javascript - Meteor:对电子邮件验证确认执行某些操作