iT邦幫忙

2022 iThome 鐵人賽

DAY 1
1
自我挑戰組

30 天線上自學前端系列 第 17

[Day 17] [APIs] 用 Body-Parser package 來解析 POST Request 後再傳給 Server

  • 分享至 

  • xImage
  •  

前面介紹過將 OpenWeather API 回傳的資料如何展示在網頁上,除了文字以外也包含圖片,隨著天氣變化,溫度和天氣狀況會依照 API 回傳的資料來改變。不過目前地點是不能變動的。

所以這堂課要教的就是如何讓使用者在網頁就能更換地點,並依照地點給不一樣的天氣資料。

第一步要先在 index.html 上有輸入匡讓使用者輸入資料:

<body>
    <label for="cityInput">City Name:</label>
    <input id ="cityInput" type="text" name="cityName">
</body>

第二步用 <form> 把送出按鈕和上面的輸入匡包起來:

<form action="/" method="post">
<label for="cityInput">City Name:</label>
<input id ="cityInput" type="text" name="cityName">
<button type="submit">GO!</button>
</form>

第三步是到 js 檔案裡加上 post

app.post('/', function(req,res){
    console.log("Post request recieved")
})

接著用 nodemon app.js 來看看是否在前端輸入文字送出,terminal 有出現 "Post request recieved"。有的話就代表基本的已經都接好了,可以繼續進行下一步。

接著回到 terminal,用 npm i body-parser 裝好套件。body-parser 是一個套件,讓我們可以看到 post request 和來抓取前端 <input> 給的東西。

裝好套件之後回到 js 檔案跟開始使用這個套件:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));

以及加上 console.log 在網頁輸入的內容,在 HTML 裡我的 input name 是 cityName:

app.post('/', function(req,res){
    
    console.log(req.body.cityName);
    console.log("Post request recieved");

})

還有這時候應該要可以看到我們 input 的內容,所以我會預期在 terminal 裡看到我剛剛在網頁上輸入的東西。

在 terminal 上確認好有收到網頁輸入的文字之後,把前兩天寫好的獲取 api 資訊的功能直接複製貼上在 app.post 裡面:

    const query = req.body.cityName;
    const url = 'https://api.openweathermap.org/data/2.5/weather?q=' + query +'&appid=Key';
    
    /* query 是網頁上輸入的文字,輸入什麼就會帶入這網址。
    
    https.get(url, function(response){
        // console.log('statusCode: ', response.statusCode);
        // console.log('headers: ', response.headers);
        response.on('data', function(data){
            const weatherData = JSON.parse(data)
            console.log(weatherData)

            const temp = weatherData.main.temp
            const weatherDescription = weatherData.weather[0].description
            const weatherIcon = weatherData.weather[0].icon
            const imageURL = ' http://openweathermap.org/img/wn/'+weatherIcon+'@2x.png'
            console.log('TEMPERATURE IS HERE: '+temp)
            res.write('<h1>The temperature in London is '+temp+'</h1>');
            res.write('<h1>The weather is currently '+weatherDescription+'</h1>');
            res.write('<img src='+imageURL+'>');
            res.send();

        })
    });

OK~ 目前已經完成簡單查其他城市天氣的功能。

https://ithelp.ithome.com.tw/upload/images/20220917/20151588CXiceG16d0.png

雖然上面截圖是倫敦,但其實這是台灣的天氣狀況 XD

所以城市這邊也要改成動態去看 API 給的資料,所以「城市」這邊改成剛剛設定的變數 query

res.write('<h1>The temperature in '+query+' is '+temp+'</h1>');

登愣~ 輸入的城市名稱會自動帶入結果了:

https://ithelp.ithome.com.tw/upload/images/20220918/20151588clN5Zn8DKg.png


上一篇
[Day 16] [APIs] 用 Express 和即時氣象資料來渲染網站
下一篇
[Day 18] [APIs] 回顧 API 學習過程、鐵人賽達標狀況 & Mailchimp API 小挑戰前置作業!
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言