我正在使用apn模块(https://github.com/argon/node-apn)从NodeJS向iPhone发送推送通知。
我的代码在我的开发机器(Mac OSX)上工作正常,并且通过Apple沙盒网关(gateway.sandbox.push.apple.com)成功推送通知,但当我将其移动到登台服务器(正在运行)时Ubuntu)推送通知失败,显示消息:
Error: ENOENT, no such file or directory 'apns-dev-cert.pem'
我正在设置NodeJS apn对象:
var options = {
cert: "apns-dev-cert.pem",
key: "apns-key.pem",
passphrase: null,
gateway: "gateway.sandbox.push.apple.com",
port: 2195,
enhanced: true,
errorCallback: undefined,
cacheLength: 5
};
在我的开发Mac OSX计算机上,证书安装在Keychain中。根据我对Ubuntu的有限理解,相当于将cert文件复制到/ etc / ssl / certs。我尝试这样做,并在我的NodeJS代码中将路径更改为“/etc/ssl/certs/apn-dev-cert.pem”,但显示相同的错误消息。
有什么想法吗?
答案 0 :(得分:2)
我一直在努力解决这个问题,直到我意识到我还没有理解fs
模块如何读取文件。显然,它从您启动节点进程的目录中读取它们。因此,.pem
文件的路径应该与您正在执行此操作的位置相关。
您可能也想check out __dirname
,可能会make it easier to specify your paths。
答案 1 :(得分:0)
您尝试设置如下:
var options = {
//cert: "apns-dev-cert.pem",
//key: "apns-key.pem",
pfx: '<path>/apns-key.pem',
passphrase: null,
gateway: "gateway.sandbox.push.apple.com",
port: 2195,
enhanced: true,
errorCallback: undefined,
cacheLength: 5
};