#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");
});
Комментарии:
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>"
);