iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
自我挑戰組

後端工程師自我練習,使用Node.js來做後端server系列 第 4

[Day-4] Node.js [使用http建立CRUD rest api]

  • 分享至 

  • xImage
  •  

[ Day4 ]

說明:
今天來使用http這個套件來搭個簡易的http server
建立幾個restful api來展示一下套件的使用效果

一、引入http套件

const http = require('http');
const port = 45001

二、建立server監聽路徑
使用createServer方法,匿名函數傳入request和response
判斷request的url路徑,判斷要進入哪一段response中
這裡的方法十分相似於在java servelt中的controller
另外透過request的method type可以決定是哪種類型的對應

 const server = http.createServer((req, res) => {
    console.log(req.method)
    if (req.url == '/') {
      res.writeHead(200, { 'Content-type': 'text/plain' });
      res.end('mainPage')
    } else if (req.url == '/user' && req.method == 'GET') {
      res.writeHead(200, { 'Content-type': 'application/json' });
      res.end('{"name":"John", "age": "12"}')
    } else if (req.url == '/user' && req.method == 'POST') {
      res.writeHead(200, { 'Content-type': 'application/json' });
      res.end('got user data')
    }
  });

需要注意的是除了透過request.method屬性可以拿到request type外
另外可以接收request.headers屬性,拿到client端傳來的header參數,例如cookie,access-token等

三、回傳response

res.writeHead(200, { 'Content-type': 'text/plain' });
res.end('mainPage')

response可以執行writeHead方法傳回http-status以及header
一般正常未出錯的情況下,會回傳httpStatus200 OK 的訊息
在end方法中,傳回httpbody內容
client端在接收到body後可以根據header的content-type決定要將內容parse成何種形式顯示

四、server掛載在port上進行監聽

server.listen(port)

最後記得要呼叫listen方法指定port進行監聽

五、完整程式碼

const http = require('http');
const port = 45001

export function serv () {
  const server = http.createServer((req, res) => {
    console.log(req.headers)
    if (req.url == '/') {
      res.writeHead(200, { 'Content-type': 'text/plain' })
      res.end('mainPage')
    } else if (req.url == '/user' && req.method == 'GET') {
      res.writeHead(200, { 'Content-type': 'application/json' })
      res.end('{"name":"John", "age": "12"}')
    } else if (req.url == '/user' && req.method == 'POST') {
      res.writeHead(200, { 'Content-type': 'application/json' })
      res.end('got user data')
    } else if (req.url == '/user' && req.method == 'PUT') {
      res.writeHead(200, { 'Content-type': 'application/json' })
      res.end('user data updated')
    } else if (req.url == '/user' && req.method == 'DELETE') {
      res.writeHead(200, { 'Content-type': 'application/json' })
      res.end('user deleted')
    }
  });
  
  server.listen(port)
}

再透過POSTMAN這個好用的工具來呼叫rest api
https://ithelp.ithome.com.tw/upload/images/20200917/20110911Er3WxItEpQ.png
https://ithelp.ithome.com.tw/upload/images/20200917/20110911VZP6E3E7Rq.png
https://ithelp.ithome.com.tw/upload/images/20200917/20110911f6WQJbPvn5.png

得提醒的是,此種將所有路徑映射都寫在同一方法同一個檔案裡的做法,在實際開發上很難維護運行
所以後續將使用其他套件將controller路徑對應到的方法拆開來

Day4結束


上一篇
[Day-3] Node.js 入門[基本套件模組輸出]
下一篇
[Day-5] Node.js [使用mysql原生語句連結資料庫]
系列文
後端工程師自我練習,使用Node.js來做後端server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言