明天剛好是颱風假,天氣總是難以預測,因此做一個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}`);
});
以下是程式碼的解釋:
我們首先引入所需的模組,包括 Express.js 和 Axios。Express.js 是一個 Node.js 框架,用於建立 Web 應用程式和 API,而 Axios 則是一個用於發送 HTTP 請求的模組。
我們創建了一個 Express 應用程式,並指定了應用程式的監聽埠號,通常是 3000(但也可以根據環境變數設定)。
在程式中,我們需要一個有效的天氣 API 金鑰。請替換 YOUR_API_KEY
這個地方,以你的天氣 API 金鑰。
我們使用 app.use(express.json())
中間件來解析請求主體,因為我們預計將 JSON 資料傳遞到 API。
接下來,我們設定一個路由,當客戶端發送 GET 請求到 /weather
路徑時,它會執行以下操作:
city
,如果未提供,則使用預設的城市名稱。axios.get
方法向 OpenWeatherMap API 發送 GET 請求。res.json()
將其返回給客戶端。如果在這個過程中出現錯誤,我們會回傳一個 HTTP 狀態碼 500,並返回一個包含錯誤訊息的 JSON 物件。
最後,我們使用 app.listen
啟動 Express 應用程式,並指定監聽的埠號。當伺服器啟動時,會顯示一條訊息,表明伺服器正在監聽。
這個程式提供了一個簡單的 API 端點 /weather
,可以接受城市名稱作為查詢參數,並返回該城市的天氣資訊。你可以透過訪問 /weather?city=YOUR_CITY_NAME
來測試它,其中 YOUR_CITY_NAME
是你要查詢的城市名稱。