NodeJS http服務端獲取POST請求數據

http服務

我們知道,使用nodejs標準庫的http模塊創建一個http服務很簡單,如下:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

http.createServer傳了一個回調函數作爲參數,每當一個請求進來時,會產生一個request事件,從而讓該回調函數被調用一次,該回調函數接收兩個參數,req表示請求對象,res表示響應對象,但是需要注意的是,req對象中包含了http請求的所有請求頭,但是卻不包含Post請求的數據(request body)。

獲取請求數據

那麼我們如何得到Post請求的數據呢?事實上,請求數據是以流的方式從客戶端(瀏覽器)傳到服務端的,當有數據到達時,req對象會產生一個data事件,當數據傳輸完畢時,req對象會產生一個end事件,因此,我們只需要將data事件中得到的數據暫時保存起來,當end事件產生時表示數據已經傳輸完,便可以開始使用得到的請求數據,代碼示例如下:

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    let data = []
    req.on('data', chunk => {
        data.push(chunk)  // 將接收到的數據暫時保存起來
    })
    req.on('end', () => {
        console.log(JSON.parse(data)) // 數據傳輸完,打印數據的內容
    })
    // res.statusCode = 200;
    // res.setHeader('Content-Type', 'text/plain');
    // res.end('Hello World');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

使用express

如果使用express的話,就非常方便了,可以使用body-parser直接將body數據解析到req對象中:

const bodyParser = require('body-parser')

app.use(
  bodyParser.urlencoded({
    extended: true
  })
)

app.use(bodyParser.json())

app.post('/todos', (req, res) => {
  console.log(req.body)  // 直接通過req對象中的body屬性就可以得到請求數據
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章