2017-09-15 125 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