ESP8266 / NodeMCU POST-запрос возвращает -1 код состояния - PullRequest
0 голосов
/ 12 ноября 2018

Следующий код получает ответ сервера -1.

Что я делаю не так? Я провел множество исследований, и это рекомендуемый код.

Я проверил код сервера с помощью Postman, и он работает нормально, поэтому это должен быть другой код.

Используемая библиотека: ESP8266HTTPClient.h

Код ESP8266

void loop() { 
    HTTPClient http;

    http.begin("http://localhost:3003/record");
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");

    int httpCode = http.POST("Message");
    String payload = http.getString();

    Serial.println(httpCode);           // -1
    Serial.println(payload);            // nothing

    http.end();
}

Узел Экспресс-сервер

var express = require("express");
var router = express.Router();

router.post("/record", function(req, res) {
    let message = req.body;
    console.log(message);

    res.status(200).send({
        message: message
    });
});

module.exports = router;

Также пробовал другой API, с запросом GET. Все еще не работает.

void loop() { 
    HTTPClient http;

    http.begin("https://jsonplaceholder.typicode.com/posts/1");
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");

    int httpCode = http.GET();
    String payload = http.getString();

    Serial.println(httpCode);           // -1
    Serial.println(payload);            // nothing

    http.end();
}

1 Ответ

0 голосов
/ 12 ноября 2018

Посмотрите на свой URL:

http://localhost:3003/record

Что это значит?

localhost - это сокращение для специального IP-адреса - 127.0.0.1 - что означает «этот хост»

Вы не используете сервер, к которому пытаетесь подключиться, на ESP8266, поэтому вы не можете использовать там локальный хост (ESP8266, вероятно, не разрешит имя localhost в любом случае).

Вам необходимо заменить localhost именем или IP-адресом сервера, на котором работает код Node Express.

...