Невозможно отправить какие-либо HTML-элементы, отличные от , в качестве функционального ответа на запрос HTTPS с использованием node.js (Экспресс)

#javascript #html #node.js #express #https

#javascript #HTML #node.js #экспресс #https

Вопрос:

Если я изменю «< h1 >» на любой другой HTML-тег, такой как «< h2 > или < p >», он не сможет их отобразить. Я понятия не имею, что не так.

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

const app = express();

// home page
app.get("/", function (req, res) {
  res.sendFile(__dirname   "/index.html");
});

app.post("/", function (req, res) {
  const queryCity = "London";
  // const queryCity = String(req.body.cityName);
  const apiKey = "lorem";
  const url =
    "https://api.openweathermap.org/data/2.5/weather?q="  
    queryCity  
    "amp;appid="  
    apiKey  
    "amp;units=metric";

  https.get(url, function (response) {
    response.on("data", function (data) {
      const weatherData = JSON.parse(data);

      const temp = weatherData.main.temp;
      const feel = weatherData.main.feels_like;
      const weatherIcon = weatherData.weather[0].icon;
      const iconUrl =
        "https://openweathermap.org/img/wn/"   weatherIcon   "@2x.png";

      res.write(
        "<h1>Temperature in "   queryCity   " is "   temp   "deg Celsius.</h1>"
      );
      res.write("It feels like "   feel   "deg Celsius.");
      res.write("<img src="   iconUrl   ">");
      res.send(); // there can only be one res.send()
    });
  });
});

// server port
app.listen(3000, function () {
  console.log("Server live on port 3000");
});
  

это то, что происходит, когда я меняю h1 на h2 или p. Тег Img также не выполняется. Что я здесь делаю не так?

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

1. Не используйте res.write . Вместо этого. Создайте ваш HTML в строке, а затем вызовите res.send(htmlstr) , и он отправит html. Кроме того, было бы хорошо, если бы вы использовали что-то из view engine при рендеринге больших html-фрагментов

2. Используйте res.set(‘Content-Type’, ‘text / html’) перед отправкой ответа.

Ответ №1:

Этот код никогда не завершается ошибкой:

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

app.get('/', function(req, res) {
  res.type('text/html');
  res.send('<h1>I am html</h1>');
});

app.listen(process.env.PORT || 8080);
  

Попробуйте протестировать свою генерацию html с помощью этого базового кода, чтобы убедиться, что ошибка не является проблемой nodejs.

Другие советы:

  • замените res.write на res.send , как в моем примере
  • не вызывайте res.write несколько раз, просто один раз отправьте строку, ранее созданную с вашими html-строками
  • добавьте тип содержимого text / html в свой ответ

Ответ №2:

Ранее также была эта ошибка. Удалось исправить это, добавив html-тег к первому res.write .

Используя ваш код, это было бы так;

 res.write(
    "<html><h1>Temperature in "   queryCity   " is "   temp   "deg Celsius.</h1></html>"
  );