這篇將跟大家講解到,如何從前端傳送表單資料到後端去,且用 body-parser 來解析資料
安裝 body-parser 套件
body-parser 為一個解析表單資料的套件,先 npm install body-parser --save
安裝好之後
就可以來引用了
1 2 3 4 5
| const bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));
|
上述就是引用的程式碼,當好了之後可以藉由 req.body
來取得表單的資料
傳統表單的傳送方式
先模擬一下傳統表單送出之後的流程,首先會有一個 search.ejs,route 也需建立來 render 它
1 2 3 4
| app.get('/search', function(req, res) { res.render('search'); });
|
1 2 3 4 5
| <form action="/searchList" method="POST"> <input type="text" name="searchText" value=""> <input type="submit" value="送出"> </form>
|
因為 form 的 action 是傳送到 searchList 所以還需要新增這個 route
1 2 3 4 5 6 7
| app.post('/searchList', function(req, res) { console.log(req.body) res.redirect('search'); });
|
這個時候在頁面輸入文字且送出之後,就可以在 console 看到物件的資料,記得加上 redirect 轉址的設定
不然頁面會一直呈現轉圈的動作
採用 AJAX 傳送表單
不同於傳統表單,這次採用 AJAX 傳送表單資料,先新建一個 API route
1 2 3
| app.post('/searchAjax', function(req, res) { console.log(req.body) });
|
接著在 search.ejs 做一點改變
1 2 3 4 5 6
| <form> <input type="text" name="account" value="" id="account"> <input type="password" name="password" value="" id="password"> <input type="submit" value="送出" id="send"> </form>
|
在下方就直接寫入 AJAX 的 script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| const account = document.querySelector('#account'); const pwd = document.querySelector('#password'); const send = document.querySelector('#send');
send.addEventListener('click', function(e) { e.preventDefault(); const xhr = new XMLHttpRequest(); xhr.open('post', '/searchAjax'); xhr.setRequestHeader('Content-type', 'application/json'); const data = { account: account.value, password: pwd.value } xhr.send(JSON.stringify(data)); xhr.onload = function() { console.log(xhr.responseText) } });
|
這個時候在 console 看,就會出現我們傳送過去的物件資料,body-parser 會幫我們自動解析為 json 格式