как сделать HTML-формат в node.js (openweathermap.api) - PullRequest
0 голосов
/ 01 октября 2018

Это мой код ниже.Что я хочу сделать, так это то, что при рендеринге я хочу рендерить html-формат в index.pug без использования res.send (body);Когда я ставлю почтовый индекс, результат, подобный ссылке ниже, будет показан под текстом в index.pug.

Основная часть этой ссылки.Эта ссылка разработана в формате HTML, а не изображения.

ссылка, которую я хочу использовать

topic.js

 router.post('/weather', function(req,res){
      let url = `http://api.openweathermap.org/data/2.5/weather?zip=${req.body.zipcode}&mode=html&units=imperial&appid=${apiKey}`
      request(url, function (err, response, body) {
//this below code works but not what I wanna do           
res.send(body);
//this is something I'd like to use
res.render('index',text:body);
          }
       });
    })

index.pug

h1= text

1 Ответ

0 голосов
/ 01 октября 2018

Первая проблема, с которой вы сталкиваетесь, - это вызов API OpenWeather и получение только одного почтового индекса за раз.Давайте сначала исправим это, а затем нам нужно решить, как эффективно доставить данные в шаблон pug, где вы можете сгенерировать свою таблицу.

1.Извлечение нескольких значений

Спецификация API говорит о том, что вы можете объединить несколько идентификаторов города вместе, но не почтовые индексы.Если вы хотите упростить маршрут, вам следует переключиться на код города:

http://api.openweathermap.org/data/2.5/group?id=524901,703448,2643743&units=metric

В противном случае вам нужно будет сделать несколько вызовов API в маршруте, что возможно при использовании библиотеки, такой как async но вы говорите, что только начинаете программировать, так что это, вероятно, не очень хороший первый шаг.

Надеемся, что ваше приложение может использовать вместо этого ID города или, по крайней мере, вы можете начатьс этим.

2.Отправка результатов в шаблон

Результаты запроса по нескольким городам выглядят как this :

{"cnt":3,"list":[{"coord":{"lon":37.62,"lat":55.75},"sys":{"type":1,"id":7323,"message":0.0036,"country":"RU","sunrise":1485753940,"sunset":1485784855},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"main":{"temp":-10.5,"pressure":1028,"humidity":66,"temp_min":-11,"temp_max":-10},"visibility":10000,"wind":{"speed":5,"deg":200},"clouds":{"all":0},"dt":1485793175,"id":524901,"name":"Moscow"},{"coord":{"lon":30.52,"lat":50.45},"sys":{"type":1,"id":7358,"message":0.0268,"country":"UA","sunrise":1485754480,"sunset":1485787716},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"main":{"temp":-11.04,"pressure":1033,"humidity":61,"temp_min":-15,"temp_max":-9},"visibility":10000,"wind":{"speed":3,"deg":150},"clouds":{"all":0},"dt":1485793175,"id":703448,"name":"Kiev"},{"coord":{"lon":-0.13,"lat":51.51},"sys":{"type":1,"id":5091,"message":0.0034,"country":"GB","sunrise":1485762036,"sunset":1485794875},"weather":[{"id":701,"main":"Mist","description":"mist","icon":"50d"},{"id":300,"main":"Drizzle","description":"light intensity drizzle","icon":"09d"}],"main":{"temp":7,"pressure":1012,"humidity":81,"temp_min":5,"temp_max":8},"visibility":10000,"wind":{"speed":4.6,"deg":90},"clouds":{"all":90},"dt":1485793175,"id":2643743,"name":"London"}]}

.объекта в свойстве list и извлеките нужные вам данные.Вот пример использования для ... из , он просматривает результаты, создает новый более простой объект для каждого города, а затем добавляет его в массив weatherData.Просто передайте weatherData в свой шаблон с помощью res.render, и вам будет очень легко создать свою таблицу.

var weatherData = [];

for(var city in body.list){
  var cityWeather = {
    "name": city.name,
    "temperature": city.main.temp,
    "weather": city.weather[0].description
  };

  weatherData.push(cityWeather);

}

res.render('topic/weather', {"cities": weatherData});
...