繁体   English   中英

如何在发布方法之前检查值?

[英]How do a check for a value before a post method?

作为课程的一部分,我正在创建一个用于检查天气的站点,但是如果用户输入了错误的城市名称,整个应用程序就会崩溃。 谁能帮我解决问题? 已尝试检查响应的状态代码,但没有成功(我是初学者,我知道我正在做的许多事情可以通过其他更简单的方式完成)

HTML

    <!DOCTYPE html>
    <html lang="en" dir="ltr">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Será que ta frio?</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
        <link rel="stylesheet" type="text/css" href="/css/styles.css" />
      </head>
      <body>
        <nav class="navbar navbar-light">
          <form style="margin:auto;" class="form-inline" action="/" method="post"><br>
            <input style="width:200px;" class="form-control mr-sm-2" placeholder="Procurar outra cidade" name="cityName">
            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Go</button>
          </form>
        </nav>
        <br>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="balneario camboriu">
          <button class="btn btn-outline-light btn-lg" type="submit">Bc</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="blumenau">
          <button class="btn btn-outline-light btn-lg" type="submit">Blumenau</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="camboriú">
          <button class="btn btn-outline-light btn-lg" type="submit">Camboriú</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="criciuma">
          <button class="btn btn-outline-light btn-lg" type="submit">Criciúma</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="curitiba">
          <button class="btn btn-outline-light btn-lg" type="submit">Curitiba</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="florianopolis">
          <button class="btn btn-outline-light btn-lg" type="submit">Floripa</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="itajai">
          <button class="btn btn-outline-light btn-lg" type="submit">Itajaí</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="joinville">
          <button class="btn btn-outline-light btn-lg" type="submit">Joinville</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="porto belo">
          <button class="btn btn-outline-light btn-lg" type="submit">Porto belo</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="rio do sul">
          <button class="btn btn-outline-light btn-lg" type="submit">Rio do Sul</button>
        </form>
        <form class="botaoCidade" action="/" method="post">
          <input style="visibility:hidden; position:absolute;" type="text" name="cityName" value="tubarao">
          <button class="btn btn-outline-light btn-lg" type="submit">Tubarão</button>
        </form>
      </body>
    </html>

应用程序.js

const express = require("express");
const https = require("https");
const bodyParser = require("body-parser");

const app = express();
const key = "5505518a930b5cb68ed434f71806b442"

const botaoTeste = '<form action="/home" method="post"><button style="margin-top:15px" class="btn btn-outline-success " type="submit">Back</button></form>';
const puxaCss = '<p><link rel="stylesheet" type="text/css" href="/css/styles.css" /></p>';
const searchForm = '<form style="margin:auto;" class="form-inline" action="/" method="post"><br><input style="width:200px;" class="form-control mr-sm-2" placeholder="Procurar outra cidade" name="cityName"><button style="margin:10px" class="btn btn-outline-success my-2 my-sm-0" type="submit">Go</button></form>';

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + "/public"));


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

app.post("/home", function(req, res){
  res.sendFile(__dirname + "/fakeIndex.html")
})

app.post("/", function(req, res){
  res.write(puxaCss);
  res.write('<body style="background-color:#121212;"></body>')
  res.write('<meta name="viewport" content="width=device-width, initial-scale=1.0">')
  res.write('<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">');
  res.write('<meta charset="utf-8">');
  res.write('<nav style="margin:auto; background-color:#121212;" class="navbar navbar-light">' + botaoTeste + searchForm + "</nav>")
  console.log(req.body.cityName);
  const cidade = req.body.cityName;
  res.write("<title>Será que ta frio em "+ cidade +"?</title>");
  const futuroUrl = "https://api.openweathermap.org/data/2.5/forecast?q="+ cidade + "&appid=" + key + "&units=metric&lang=pt_br";
  const url = "https://api.openweathermap.org/data/2.5/weather?q=" + cidade + "&appid=" + key + "&units=metric&lang=pt_br";
  https.get(url, function(response){
    response.on("data", function(data){
      const weatherData = JSON.parse(data);
      const weatherIcon = weatherData.weather[0].icon + "@2x.png";
      const iconLocation = "http://openweathermap.org/img/wn/" + weatherIcon;
      res.write("<div style='background-color:#171717;'><br><h1>Em " + weatherData.name + " fazem " + weatherData.main.temp + " graus. </h1>");
      res.write("<p style='font-size:20px'>O clima é " + weatherData.weather[0].description + ".<br></p>");
      res.write("<p style='font-size:20px'>A sensação térmica é de " + weatherData.main.feels_like + " graus.</p><br></div>");
      // res.write("<img src=" + iconLocation + "><br>");
    });

  https.get(futuroUrl, function(response){
      response.on("data", function(data){
        const futureWeather = JSON.parse(data);
        var datas = [];
        var climas = [];
        var i = 0;
        while(i < 40){
          datas.push(futureWeather.list[i].dt_txt);
          climas.push(futureWeather.list[i].main.temp)
          i++;
        }
        var k = 0;
        res.write("<div style='background-color:#121212'><br><h2>Nos próximos dias:</h2><br>")
        res.write("<table style='text-align:center; max-width:60%; margin:auto;' class='table'><thead><tr><th scope='col'>Dia / Hora</th><th scope='col'>Graus (°)</th></tr></thead>");
        res.write("<tbody>");
        while (k < 40){
          res.write("<tr><td>" + datas[k] + " </td><td> " + climas[k] + "</td></tr>");
          k++;
        }
        // res.write("</div><div style=background-color:#ededed><br>" + botaoTeste + "</div><br>");
        // res.write(botaoTeste);
        res.write('</div>');
        res.send();
    })
  })
  })
})



app.listen(process.env.PORT || 3000, function(){
  console.log("3000 NA ESCUTA");
})



也许是 try-catch 块?

try
{
  failingFunction();
}
catch(err)
{
  console.log("failingFunction threw an exception");
}

https://www.w3schools.com/js/js_errors.asp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM