Вызвать скрипт node.js (nightmarejs) в переполнении стека

Моя проблема довольно тихая, я начинаю с nodejs / nightmarejs, и мне нужно вызвать этот сценарий js в моем сценарии php, чтобы получить ответ от него.

Я использую Wamp и мои скрипты находятся в одной папке:

C:\wamp64\www\nightmare\index.php
C:\wamp64\www\nightmare\index.js

index.js:

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true })

nightmare
.goto('http://yahoo.com')
.type('form[action*="/search"] [name=p]', 'nightmare github')
.click('form[action*="/search"] [type=submit]')
.wait('#main')
.evaluate(function () {
return document.querySelector('#main .searchCenterMiddle li a').href
})
.end()
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Search failed:', error);
});

index.php:

<?php

exec("index.js", $jsOutput);
var_dump($jsOutput);

?>

Я видел в некоторых других сообщениях, что если я использую exec() я должен дать всю командную строку для его правильной работы, что-то вроде:

exec("node index.js", $jsOutput);

Я понял, что должен был дать весь путь к nodejs, может быть? Но я не нашел способа извлечь путь к nodejs из моей текущей папки.
Если у кого-нибудь есть свет, это будет оценено.
большое спасибо

0

Решение

Для поиска файла в Windows вы можете использовать где команда:

<?php
exec('where node', $nodePath);

if ($nodePath && $nodePath[0]) {

exec('"' . $nodePath[0] . '" index.js', $jsOutput);

var_dump($jsOutput);
}
else {
echo 'node not found.';
}

Под Linux вы можете разместить, который или же находить команды.

1

Другие решения

Ну, я думаю, это распространенная ошибка.
Я забыл перезагрузить мой компьютер после того, как я установил node.js, и это необходимо сделать, чтобы применить изменения, внесенные в переменную среды Windows, чтобы вы могли вызывать узел в командной строке …

0

По вопросам рекламы [email protected]