Как можно запустить PHP скрипт с использованием NodeJS?

Как можно подключить виджет-карту от СДЭК к сайту, который работает на NodeJS с использованием expressjs, если скрипт запроса для API от СДЭК написан на PHP?
  • 17 января 2024 г. 22:18
Ответы на вопрос 3
Для запуска PHP скрипта с использованием Node.js вам нужно будет воспользоваться встроенным модулем `child_process`, который позволяет запускать процессы на операционной системе, включая команду `php` для интерпретации PHP скриптов.

Давайте рассмотрим оба ваших вопроса по отдельности:

### 1. Запуск PHP скрипта из Node.js

В Node.js вы можете использовать функцию `exec` или `spawn` из модуля `child_process` для запуска PHP скрипта. Вот пример с использованием `exec`:

```javascript
const { exec } = require('child_process');

exec('php /path/to/your/script.php', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  if (stderr) {
    console.error(`stderr: ${stderr}`);
  }
});
```

Поместите код выше в файл Node.js и замените `/path/to/your/script.php` на путь к вашему PHP скрипту.

### 2. Встраивание виджета-карты СДЭК

Чтобы подключить PHP-скрипт, например виджет-карту от СДЭК, к сайту на Node.js с использованием Express, вы можете сделать следующее:

#### А. Прямое встраивание:

Если PHP скрипт возвращает JavaScript код для создания виджета, его можно оформить так, чтобы он был вставлен непосредственно на страницу. К примеру, если у вас есть предоставленный СДЭКом код виджета, вы можете добавить его в ваш HTML шаблон.

#### Б. Использование PHP через Node.js:

Обычно для взаимодействия с API предпочтительнее использовать язык сервера. Если API СДЭК позволяет обработку запросов на Node.js, напишите эквивалент скрипта на Node.js с использованием модулей вроде `axios` или `node-fetch`.

Но если вы все же хотите использовать существующий PHP скрипт, воспользуйтесь методом описанным выше для запуска PHP скрипта и обработайте его вывод в Node.js. Вам также нужно будет убедиться, что на сервере установлен PHP.

#### В. API:

Если скрипт для API СДЭК написан на PHP и вы не хотите его переписывать на JavaScript, вы можете сделать оконечную точку на своем Node.js сервере, которая будет запускать PHP скрипт и возвращать результаты.

Здесь пример обработчика для Express.js:

```javascript
const express = require('express');
const { exec } = require('child_process');
const app = express();

app.get('/sdek-widget', (req, res) => {
  exec('php /path/to/your/sdek/api/script.php', (error, stdout, stderr) => {
    if (error) {
      res.status(500).send(`Server error: ${error}`);
      return;
    }
    if(stderr){
      console.error(`stderr: ${stderr}`);
    }
    // предполагаем, что stdout содержит нужные данные для виджета
    res.send(stdout);
  });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
```

Запустите это приложение, и каждый раз, когда пользователь перейдет на `/sdek-widget`, Node.js выполнит PHP скрипт и вернет результат.

Также стоит учесть, что подобные задачи — запуск PHP через Node.js — не самая лучшая практика в терминах эффективности и безопасности. Если возможно, лучше переписать необходим
Хотя мне кажеться лучше переписать service.php под js.

И это правильный ответ
Переписать на NodeJs - единственный вариант. Делов - на пару часов. 
Хочешь получить геморрой - слушай остальных умников
Похожие вопросы