Выполнение python из nodejs (размещенного во внешнем домене)

Итак, у меня работает следующий экспресс-сервер node.js:

const express = require('express')
const app = express()
const PythonShell = require('python-shell');


app.get('/', (req, res) => {
    res.send('Please append a search');
});

app.get('/:card', (req, res) => {
    card = [req.params.card]

    var pyshell = new PythonShell('search_card.py', {args: card});

    pyshell.on('message', (message) => {
        res.send(message);
    });

    pyshell.end((err) => {
        if (err) throw err;
    });
});

app.listen(9000, () => console.log('App listening on port 9000!'));

Когда я использую приложение, используя локальный IP-адрес сервера (который размещен в интрасети), все работает нормально.

Но если я использую внешний IP-адрес, корень приложения работает (/), поэтому очевидно, что соединение возможно, а порт открыт и т. д., Но если я использую функцию поиска (/ search_query), это займет несколько секунд (как если скрипт python действительно запущен), а затем хром сообщает ERR_CONNECTION_REFUSED (этот сайт недоступен).

Кто-нибудь может объяснить такое поведение?

Обновлено: Я помещаю console.log в pyshell.on ('message'), и данные принимаются из программы python. Как только он пишет, он терпит неудачу

Журналы вашего узла что-нибудь выводят при возникновении ошибки?

rafaismyname 13.09.2018 18:36

@rafaismyname К сожалению, нет

Craig Armstrong 13.09.2018 18:38

в обоих случаях они размещены на одной машине / процессе? Единственное, что отличается, - это то, что работает localhost: 3000 / search_query, но YOUREXTERNALIP: 3000 / search_query не работает?

rafaismyname 13.09.2018 18:42

@rafaismyname Да, именно так

Craig Armstrong 13.09.2018 18:52

Вы (и / или машина пытаетесь работать удаленно) под каким-либо прокси / брандмауэром? ERR_CONNECTION_REFUSED и объяснение, которое вы дали, ясно указывают на какую-то проблему с сетью ...

rafaismyname 13.09.2018 18:58

@rafaismyname Не то, чтобы я в курсе. Удаленная машина - это raspberry pi, на которой размещено приложение узла, а я нахожусь на машине с Windows. Оба устройства находятся у меня дома в моей локальной сети. Изменить: из быстрого поиска в Google Pi не поставляется с установленным брандмауэром. Так что это не брандмауэр на той стороне.

Craig Armstrong 13.09.2018 18:59

также, вероятно, стоило бы попытаться установить адрес хоста express на 0.0.0.0 вместо 127.0.0.0 по умолчанию, например: app.listen(9000, '0.0.0.0', () => console.log('App listening on port 9000!'));

rafaismyname 13.09.2018 19:00

если это не сработает, возможно, этот поток может вам помочь: raspberrypi.org/forums/viewtopic.php?t=128838

rafaismyname 13.09.2018 19:06

Спасибо за попытку помочь! К сожалению, это ничего не изменило. Я проверю эту ветку сейчас

Craig Armstrong 13.09.2018 19:07

О, я также должен уточнить. Я не подключаюсь к пи, используя localhost или 0.0.0.0, я использую его внутренний IP (10.0.0.22:9000). Это прекрасно работает. Но использование моего внешнего IP-адреса не удается

Craig Armstrong 13.09.2018 19:09

извините, больше нет подсказок! надеюсь, что вы найдете решение в этой теме! :)

rafaismyname 13.09.2018 19:10
0
11
31
0

Другие вопросы по теме