iT邦幫忙

2023 iThome 鐵人賽

DAY 19
1
自我挑戰組

NodeJS with MongoDB專案開發系列 第 19

day 19 node.js with mongo db專案開發

  • 分享至 

  • xImage
  •  

node.js天氣預報

明天剛好是颱風假,天氣總是難以預測,因此做一個node.js程式來預報天氣是相當帶給人們方便的,明天出門是否帶雨具的標準也可以有一個依據

const express = require('express');
const axios = require('axios');

const app = express();
const port = process.env.PORT || 3000;

const apiKey = 'YOUR_API_KEY'; // 替換為你的天氣 API 金鑰

app.use(express.json());

app.get('/weather', async (req, res) => {
  try {
    const city = req.query.city || 'YOUR_DEFAULT_CITY'; // 替換為你要查詢的城市名稱或預設城市
    const apiUrl = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;

    const response = await axios.get(apiUrl);
    const data = response.data;

    const cityName = data.name;
    const temperature = data.main.temp;
    const weatherDescription = data.weather[0].description;

    const weatherInfo = {
      city: cityName,
      temperature: temperature,
      description: weatherDescription,
    };

    res.json(weatherInfo);
  } catch (error) {
    res.status(500).json({ error: '無法獲取天氣資訊' });
  }
});

app.listen(port, () => {
  console.log(`伺服器正在監聽埠號 ${port}`);
});

以下是程式碼的解釋:

  1. 我們首先引入所需的模組,包括 Express.js 和 Axios。Express.js 是一個 Node.js 框架,用於建立 Web 應用程式和 API,而 Axios 則是一個用於發送 HTTP 請求的模組。

  2. 我們創建了一個 Express 應用程式,並指定了應用程式的監聽埠號,通常是 3000(但也可以根據環境變數設定)。

  3. 在程式中,我們需要一個有效的天氣 API 金鑰。請替換 YOUR_API_KEY 這個地方,以你的天氣 API 金鑰。

  4. 我們使用 app.use(express.json()) 中間件來解析請求主體,因為我們預計將 JSON 資料傳遞到 API。

  5. 接下來,我們設定一個路由,當客戶端發送 GET 請求到 /weather 路徑時,它會執行以下操作:

    • 我們檢查請求中的查詢參數 city,如果未提供,則使用預設的城市名稱。
    • 我們構建了一個 API URL,其中包含城市名稱和 API 金鑰,並使用 axios.get 方法向 OpenWeatherMap API 發送 GET 請求。
    • 當我們獲得 API 的回應後,我們從回應數據中提取城市名稱、溫度和天氣描述。
    • 最後,我們將這些資訊組成一個 JSON 物件,然後通過 res.json() 將其返回給客戶端。
  6. 如果在這個過程中出現錯誤,我們會回傳一個 HTTP 狀態碼 500,並返回一個包含錯誤訊息的 JSON 物件。

  7. 最後,我們使用 app.listen 啟動 Express 應用程式,並指定監聽的埠號。當伺服器啟動時,會顯示一條訊息,表明伺服器正在監聽。

這個程式提供了一個簡單的 API 端點 /weather,可以接受城市名稱作為查詢參數,並返回該城市的天氣資訊。你可以透過訪問 /weather?city=YOUR_CITY_NAME 來測試它,其中 YOUR_CITY_NAME 是你要查詢的城市名稱。


上一篇
Node.js with Mongo DB專案開發
下一篇
day 20 Mongo DB連動Node.js專案開發
系列文
NodeJS with MongoDB專案開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言