Как я могу передать параметры при вызове Node.js скрипт из PHP exec()?


Я пытаюсь реализовать push-уведомления iOS. Моя версия PHP перестала работать, и я не смог заставить ее снова работать. Тем не менее, у меня есть node.js скрипт, который отлично работает, используя новый ключ аутентификации Apple. Я могу вызвать это из PHP, используя:

chdir("../apns");
exec("node app.js &", $output);

Тем не менее, я хотел бы иметь возможность передать устройство и сообщение ему. Есть ли какой-либо способ передать параметры скрипту?

Вот сценарий, который я пытаюсь запустить(app.js ):

var apn = require('apn');

var apnProvider = new apn.Provider({  
     token: {
        key: 'apns.p8', // Path to the key p8 file
        keyId: '<my key id>', // The Key ID of the p8 file (available at https://developer.apple.com/account/ios/certificate/key)
        teamId: '<my team id>', // The Team ID of your Apple Developer Account (available at https://developer.apple.com/account/#/membership/)
    },
    production: false // Set to true if sending a notification to a production iOS app
});

var deviceToken = '<my device token>';
var notification = new apn.Notification();
notification.topic = '<my app>';
notification.expiry = Math.floor(Date.now() / 1000) + 3600;
notification.badge = 3;
notification.sound = 'ping.aiff';
notification.alert = 'This is a test notification \u270C';
notification.payload = {id: 123};

apnProvider.send(notification, deviceToken).then(function(result) {  
    console.log(result);
    process.exit(0)
});
Author: Lastmboy, 0000-00-00

1 answers

Вы можете передавать параметры так же, как передавали бы их любому другому скрипту.

node index.js param1 param2 paramN

Вы можете получить доступ к аргументам через process.argv

Процесс.свойство argv возвращает массив, содержащий аргументы командной строки , переданные при Node.js процесс был запущен. Первый элементом будет process.execPath. См. process.argv0, если требуется доступ к исходному значению argv[0]. Вторым элементом будет путь к файлу JavaScript, который выполненный. Остальные элементы будут любые дополнительные аргументы командной строки.

exec("node app.js --token=my-token --mesage=\"my message\" &", $output);

App.js

console.log(process.argv);

/* 
Output:

[ '/usr/local/bin/node',
  '/your/path/app.js',
  '--token=my-token',
  '--mesage=my message' ] 
*/

Вы можете использовать минимист для анализа аргументов для вас:

const argv = require('minimist')(process.argv.slice(2));
console.log(argv);

/*
 Output

{
    _: [],
    token: 'my-token',
    mesage: 'my message'
} 
*/

console.log(argv.token) //my-token
console.log(argv.message) //my-message
 8
Author: Marcos Casagrande, 2018-02-07 14:20:24