2017-04-09 49 views
1

我試圖將firebase-queue工作人員轉換爲將推送通知發送到雲端功能。我正在使用node-apn向iOS設備發送推送通知。它需要建立一個連接,要求我指定一個key.pem文件和cert.pem文件。這些文件存在於工作人員js文件所在的同一位置,並且沒有任何問題。我搬到了代碼到雲的功能,但我在日誌控制檯引用雲功能中的pem文件

{ Error: ENOENT: no such file or directory, open './cert.pem' 
    at Error (native) 
    errno: -2, 
    code: 'ENOENT', 
    syscall: 'open', 
    path: './cert.pem' } 'Unable to send push notification to iOS device. Socket Error' 

以下是文件的方式規定得到這個錯誤,並在代碼

var connectionOptions = { 
    cert:'./cert.pem', 
    key:'./key.pem', 
    production: true 
}; 

var apnConnection = new apn.Connection(connectionOptions); 

我曾嘗試創建連接指定的證書文件爲./cert.pemcert.pem但我在兩種情況下都得到類似的錯誤。我想問題是.pem文件不隨功能一起發貨。

如何在雲功能中指定這樣的文件?

+0

運氣好的話這個了嗎? – BausTheBig

+0

沒有。我還沒有找到任何解決這個問題的方法,並且對Firebase團隊中沒有人提供任何建議感到有點失望。我暫時依靠隊友工作。 –

+0

無論如何感謝您的答案。 – BausTheBig

回答

1

您的路徑引用對於Firebase函數來說不太合適。

它應該是:

var connectionOptions = { 
    cert:__dirname + '/cert.pem', 
    key:__dirname + '/key.pem', 
    production: true 
}; 
+0

感謝您的回答。我也會試試這個。在查看Firebase函數文檔時,我沒有發現任何使用'__dirname'的引用,並且我只是通過文檔和firebase函數示例搜索了https://github.com/firebase/functions-samples並且沒有看到任何對'__dirname'的引用。是否有可能爲我和其他人分享這一改變的好處?謝謝! –

+1

希望這應該解釋你的原因:https://stackoverflow.com/questions/8131344/what-is-the-difference-between-dirname-and-in-node-js – user2895001

+0

非常感謝參考stackoverflow問題。今天學到了一些新的和重要的東西。我很抱歉,我無法測試您所提出的更改,因爲我無法讓我的當前任務失去時間。 –