node.js Ошибка типа [ERR_INVALID_PROTOCOL]: протокол «http:» не поддерживается. Ожидается «https:

#node.js #express #node-modules

#node.js #экспресс #модули узлов

Вопрос:

Приведено ниже Node.js код я пытался использовать https в соответствии с требованиями проекта, но получал ошибку

Ошибка типа [ERR_INVALID_PROTOCOL]: протокол «http:» не поддерживается. Ожидается «https:»

 const express = require("express");
var https = require("https");


const app = express();


app.get("/", function(req, res) {

    const url = "http://api.openweathermap.org/data/2.5/weather?q=Gwalioramp;appid=4b01458a2b74d57ff37f136f382ac4d5amp;units=metric";

    https.get(url, function(response) {
        console.log(response.statusCode)
    });
    res.send("Server is Up and Running");
})



app.listen(3000, function() {
    console.log("Server is running on port 3000.");
})
 

Полная трассировка стека ошибок:

 TypeError [ERR_INVALID_PROTOCOL]: Protocol "http:" not supported. Expected "https:"
    at new ClientRequest (_http_client.js:151:11)
    at request (https.js:316:10)
    at Object.get (https.js:320:15)
    at C:UsersPublicDocumentsWeatherProjectapp.js:12:10
    at Layer.handle [as handle_request] (C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterlayer.js:95:5)
    at next (C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterroute.js:137:13)
    at Route.dispatch (C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterroute.js:112:3)
    at Layer.handle [as handle_request] (C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterlayer.js:95:5)
    at C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterindex.js:281:22
    at Function.process_params (C:UsersPublicDocumentsWeatherProjectnode_modulesexpresslibrouterindex.js:335:12)
 

Но если я использую http, он работает нормально, даже если я пытался с
помощью узла установить https (все еще не работает)

Комментарии:

1. Ваша url переменная начинается с http:// .

Ответ №1:

Проблема с кодом заключается в том, что вы делаете запрос https и в своем URL-адресе используете "http" вместо "https" . Поэтому, если вы измените свой URL "https" -адрес, он должен работать.

https://api.openweathermap.org/data/2.5/weather?q=Gwalioramp;appid=4b01458a2b74d57ff37f136f382ac4d5amp;units=metric

Я знаю, что вы поняли это, но для тех, кто может столкнуться с этим в будущем, поэтому код должен быть:

 const express = require("express");
var https = require("https");


const app = express();


app.get("/", function(req, res) {

    const url = "https://api.openweathermap.org/data/2.5/weather?q=Gwalioramp;appid=4b01458a2b74d57ff37f136f382ac4d5amp;units=metric";

    https.get(url, function(response) {
        console.log(response.statusCode)
    });
    res.send("Server is Up and Running");
})



app.listen(3000, function() {
    console.log("Server is running on port 3000.");
})
 

Ответ №2:

Ваш запрос https и ваш URL начинаются с http:// того, когда это должно быть https:// .