Итак, у меня работает следующий экспресс-сервер 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.info('App listening on port 9000!'));
Когда я использую приложение, используя локальный IP-адрес сервера (который размещен в интрасети), все работает нормально.
Но если я использую внешний IP-адрес, корень приложения работает (/), поэтому очевидно, что соединение возможно, а порт открыт и т. д., Но если я использую функцию поиска (/ search_query), это займет несколько секунд (как если скрипт python действительно запущен), а затем хром сообщает ERR_CONNECTION_REFUSED (этот сайт недоступен).
Кто-нибудь может объяснить такое поведение?
Обновлено: Я помещаю console.info в pyshell.on ('message'), и данные принимаются из программы python. Как только он пишет, он терпит неудачу
@rafaismyname К сожалению, нет
в обоих случаях они размещены на одной машине / процессе? Единственное, что отличается, - это то, что работает localhost: 3000 / search_query, но YOUREXTERNALIP: 3000 / search_query не работает?
@rafaismyname Да, именно так
Вы (и / или машина пытаетесь работать удаленно) под каким-либо прокси / брандмауэром? ERR_CONNECTION_REFUSED и объяснение, которое вы дали, ясно указывают на какую-то проблему с сетью ...
@rafaismyname Не то, чтобы я в курсе. Удаленная машина - это raspberry pi, на которой размещено приложение узла, а я нахожусь на машине с Windows. Оба устройства находятся у меня дома в моей локальной сети. Обновлено: из быстрого поиска в Google Pi не поставляется с установленным брандмауэром. Так что это не брандмауэр на той стороне.
также, вероятно, стоило бы попытаться установить адрес хоста express на 0.0.0.0
вместо 127.0.0.0
по умолчанию, например: app.listen(9000, '0.0.0.0', () => console.info('App listening on port 9000!'));
если это не сработает, возможно, этот поток может вам помочь: raspberrypi.org/forums/viewtopic.php?t=128838
Спасибо за попытку помочь! К сожалению, это ничего не изменило. Я проверю эту ветку сейчас
О, я также должен уточнить. Я не подключаюсь к пи, используя localhost или 0.0.0.0, я использую его внутренний IP (10.0.0.22:9000). Это прекрасно работает. Но использование моего внешнего IP-адреса не удается
извините, больше нет подсказок! надеюсь, что вы найдете решение в этой теме! :)
Журналы вашего узла что-нибудь выводят при возникновении ошибки?