Клиент Node.js не может видеть данные с сервера Express - PullRequest
0 голосов
/ 31 декабря 2018

Я устанавливаю Клиент / Сервер связь между моим планшетом и моим ПК.Мой клиент не может получить какие-либо данные с сервера, что я делаю неправильно.

На моем ПК запущен сервер Node.js (используется Express), а на планшете запущен клиент, написанный на Node.js (использует Express).,Я могу получить доступ к серверу через браузер и получить данные, но не через код JavaScript.

Мой СЕРВЕР код:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('App requested a connection');
});

app.listen(3000, () => console.log('Listening on port 3000!'));

app.get("/boxes", function (req, res)
{
  //res.send(req.params[0]);
    res.send("All boxes are in the basement");

});

Мой КЛИЕНТ код:

const express = require('express');
const app = express();

console.log("Client working ...");

app.get("http://127.0.0.1:3000/boxes", function (req, res)
{
    console.log("inside...");
    console.log(res);
});

КЛИЕНТ должен вернуться«Все ящики находятся в подвале», и я получаю это, когда использую браузер, но он не работает, если я запускаю код клиента.Единственное сообщение, которое я получаю от клиента: «Клиент работает ...».

Кто-нибудь знает, что я делаю неправильно?

Приветствия

1 Ответ

0 голосов
/ 31 декабря 2018

Express - это библиотека для настройки и настройки http-сервера для входящих запросов.Он не отправляет исходящие запросы на другие серверы.Итак, ваш клиентский код вовсе не является клиентом.

Несколько проблем здесь:

  1. 127.0.0.1 относится к вашему локальному устройству, поэтому ваш клиент обращается к себе, когдаон использует 127.0.0.1.

  2. В вашем клиенте app.get("http://127.0.0.1:3000/boxes") не является запросом данных.Это попытается настроить экспресс-маршрут для входящих запросов, как если бы вы объявляли второй сервер.Но это даже не сделано правильно, потому что вы будете использовать только путь там.

  3. Чтобы клиент мог сделать запрос на каком-то другом сервере, вам нужно будет использовать библиотечный вызов, который на самом деледелает http запросы.Например, вы можете сделать что-то вроде этого:

Код:

const rp = require('request-promise');
rp.get("http://ipaddressOfServer:3000/boxes").then(data => {
    // have response here
}).catch(err => {
    // error here
});

Я решил использовать библиотеку request-promise, но есть несколько различных способовсделать запрос http.Вы также можете использовать http.get() (нижний уровень), request() (из библиотеки запросов) или axios() из библиотеки axios и т. Д. *

Обратите внимание, что компьютер, на котором работает ваш сервер (предполагается, чтоона работает под управлением настольной ОС), возможно, также придется отключить свой локальный брандмауэр (например, брандмауэр Windows) или настроить специальное правило, разрешающее входящие соединения через порт 3000. Без этого входящее соединение будет заблокировано (по соображениям безопасности).

...