2016-05-22 3 views
0

Я пытаюсь очистить некоторый код, который я нашел в хапи сервере index.js ..требует литерал объекта с функциями

Там некоторый код, который устанавливает принудительную сеть Apple, затем присоединяется через переменную на server.apnConnection

моя проблема в том, что я пытаюсь вызвать функции, которые у меня были настройки .. они отсутствуют/нет.

index.js

server = require('./config/server/hapi.js')(config, process.env.NODE_URL); 
server.apnConnection = require('./config/server/applepush.js'); 
server.apnConnection.note("test"); 

applepush.js

'use strict'; 

var apn = require('apn'); 
var Path = require('path'); 

module.exports = function() { 

    var options = { 
     gateway: 'www.mapple.com', 
     errorCallback: function(errorNum, notification){ 
      console.log('Error is: %s', errorNum); 
      console.log('Note ' + JSON.stringify(notification)); 
     }, 
     cert: process.env.APPLE_CERT || Path.join(config.rootPath, '../cert.pem'), 
     key: process.env.APPLE_KEY || Path.join(config.rootPath, '../key.pem'), 
     enhanced: true, 
     production: false, 
     cacheLength: 100, 
     port: 2195 
    }; 
    var apnConn = new apn.Connection(options); 
    apnConn.on('connected',function(){ 
     console.log('connected to apn'); 
    }); 
    apnConn.on('transmitted', function(notification, device) { 
     console.log('Notification transmitted to:' + device.token.toString('hex')); 
    }); 
    apnConn.on('transmissionError', function(errCode, notification, device) { 
     console.error('Notification caused error: ' + errCode + ' for device ', device, notification); 
     if (errCode === 8) { 
      console.log('A error code of 8 indicates that the device token is invalid. This could be for a number of reasons - are you using the correct environment? i.e. Production vs. Sandbox'); 
     } 
    }); 
    apnConn.on('timeout', function() { 
     console.log('APNS Connection Timeout'); 
    }); 

    apnConn.on('disconnected', function() { 
     console.log('Disconnected from APNS'); 
    }); 
    apnConn.on('socketError', console.error); 

    return { 
     init: apnConn, 
     note: function (obj) { 
      var note = new apn.Notification(); 
      note.setAlertText(obj.alert); 
      note.badge = 1; 
      return note; 
     } 
    } 
}; 

Ошибка:

server.apnConnection.note("test"); 
       ^
TypeError: undefined is not a function 
    at Object.<anonymous> (~/server/index.js:60:22) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Module.runMain [as _onTimeout] (module.js:501:10) 
    at Timer.listOnTimeout (timers.js:110:15) 

ответ

1

applepush.js экспортирует функцию, а не объект. Объект, который вы ищете, возвращается экспортируемой функцией.

Вы, вероятно, должен написать что-то вроде:

server = require('./config/server/hapi.js')(config, process.env.NODE_URL); 
// Note the function call. 
server.apnConnection = require('./config/server/applepush.js')(); 
server.apnConnection.note("test"); 

Другим решением является изменение applepush.js так, что он возвращает объект вместо функции. Однако кажется, что целью этой функции является настройка сервера, и вы можете не захотеть, чтобы этот сервер был настроен сразу после загрузки модуля.

+0

ах, поэтому на данный момент я только вернул функцию, которая ВОЗВРАЩАЕТ объект, который я ожидал. apnConnection должен быть настроен после 'server', да. – Erik

+0

Оказывается, мне понадобится 'require (... path-to-js-file) (config)', но кроме этого он работал! Спасибо! – Erik

Смежные вопросы