使用 NodeJS + Express 從 GET/POST Request 取值
過去無論哪一種網站應用程式的開發語言,初學者教學中第一次會提到的起手式,八九不離十就是 GET/POST Request 的取值。但是,在 Node.js + Express 的世界中,彷彿人人是高手,天生就會使用,從不曾看到有人撰文說明。
這應該算是開發 Web Service 的入門,在 Client 與 Server 的互動中,瀏覽器發出 GET/POST Request 時會傳值給 Server-side,常見應用就是網頁上以 POST method 送出的表單內容,或是網址列上的 Query Strings (ex: page?page=3&id=5)。然後,我們的網站應用程式透過解析這些參數,得到使用者上傳的資訊。
取得 GET Request 的 Query Strings:
如果是透過表單且是用 POST method:
當然也可以 Query Strings 和 POST method 的表單同時使用:
順帶補充,還有另一種方法傳遞參數給 Server,就是使用路徑的方式,可以利用 Web Server 的 HTTP Routing 來解析,常見於的各種 Web Framework。這不算是傳統標準規範的做法,是屬於 HTTP Routing 的延伸應用。
後記
筆者最近收到網友 $10 USD 的贊助,這對持續在網路上經營寫作,是莫大的股舞,由衷感謝!
這應該算是開發 Web Service 的入門,在 Client 與 Server 的互動中,瀏覽器發出 GET/POST Request 時會傳值給 Server-side,常見應用就是網頁上以 POST method 送出的表單內容,或是網址列上的 Query Strings (ex: page?page=3&id=5)。然後,我們的網站應用程式透過解析這些參數,得到使用者上傳的資訊。
取得 GET Request 的 Query Strings:
GET /test?name=fred&tel=0926xxx572
app.get('/test', function(req, res) { console.log(req.query.name); console.log(req.query.tel); });
如果是透過表單且是用 POST method:
<form action='/test' method='post'> <input type='text' name='name' value='fred'> <input type='text' name='tel' value='0926xxx572'> <input type='submit' value='Submit'> </form>
app.post('/test', function(req, res) { console.log(req.body.name); console.log(req.body.tel); });
當然也可以 Query Strings 和 POST method 的表單同時使用:
<form action='/test?id=3' method='post'> <input type='text' name='name' value='fred'> <input type='text' name='tel' value='0926xxx572'> <input type='submit' value='Submit'> </form>
app.post('/test', function(req, res) { console.log(req.query.id); console.log(req.body.name); console.log(req.body.tel); });
順帶補充,還有另一種方法傳遞參數給 Server,就是使用路徑的方式,可以利用 Web Server 的 HTTP Routing 來解析,常見於的各種 Web Framework。這不算是傳統標準規範的做法,是屬於 HTTP Routing 的延伸應用。
GET /hello/fred/0926xxx572
app.get('/hello/:name/:tel', function(req, res) { console.log(req.params.name); console.log(req.params.tel); });
後記
筆者最近收到網友 $10 USD 的贊助,這對持續在網路上經營寫作,是莫大的股舞,由衷感謝!
thank you so much!
回覆刪除對於Express, 在GET, POST做了一個很棒的示範,好文章!
回覆刪除app.post('/', function(req, res){
回覆刪除var name = req.param('name');
這樣呢?
這也是可行的的方式,事實上有多種方式可以取得參數,挑一種方便使用的即可。
回覆刪除我們經常會用 JSON.stringify(data)的方式POST到後端,那這種方式該如何獲取?
回覆刪除不太能理解你的意思,你的意思是說將 data 轉成字串並塞到一個變數中,然後傳到後端嗎?
回覆刪除其實 Node.js 本身就是 V8 JavaScript Engine,你仍然可以直接用 JSON.parse() 去處裡前端傳過來的資料。
試用了POST的實作,在win7上使用express3.2.6版本,似乎要在路由前加上
回覆刪除app.configure(function(){
app.use(express.bodyParser());
});
才可以順利執行req.body.name
否則name會被判定為undefined