上篇文章我們完成了Node.js客戶端與服務端基本交互,並通過get請求實現客戶端傳參,服務端相應邏輯處理數據
今天我們用post請求,客戶端傳參,參數類型分別爲:application/json、application/x-www-form-urlencoded以及multipart/form-data格式,並且服務端處理
先創建一個json文件,通過fs模塊,讀取文件內容,注意設置編碼格式UTF8
user.json
[
{
"userId": 1,
"userName": "小張",
"des": "我是小張"
},
{
"userId": 2,
"userName": "小明",
"des": "我是小明"
}
]
user.js
let express = require('express')
let router = express.Router()
let fs = require('fs')
// 訪問/user根目錄
router.get('/', (req,res) => res.send('user'))
// 訪問/user/getUserList
router.post('/getUserList', (req,res) => {
fs.readFile('user.json', 'UTF8', (err, data) => {
if (err) throw err
res.send(data)
})
})
客戶端調用接口 post 請求
axios({
url:'/api' + '/user/getUserList',
method:'post',
}).then(res => {console.log(res)})
我們可以看到,完美處理請求,接下來客戶端傳參,服務端處理請求參數
客戶端
let data = {
id:2
}
axios({
url:'/api' + '/user/getUserList',
method:'post',
data:data,
headers:{
'Content-Type':'application/json' // 指定json類型
}
}).then(res => {console.log(res)})
這裏要注意了,因爲post請求參數存在請求體裏,我們用req.body是獲取不到的
不過我們可以使用express提供的中間件 body-parser
let bodyParser = require('body-parser') // 引入中間件
let jsonParser = bodyParser.json({extended:false} // 解析json類型
// 利用jsonParser解析請求體
router.post('/getUserList', jsonParser, (req, res) => {
console.log(req.body)
let {id} = req.body
fs.readFile('user.json', 'UTF8', (err, data) => {
if (err) throw err
data = JSON.parse(data).filter(item => item.id == id)
res.send(data)
})
})
我們可以看到控制檯打印req.body
同時,我們也看到服務端返回經過處理後的數據
客戶端
import qs from 'qs'
let data = {
id:2
}
axios({
url:'/api' + '/user/getUserList',
method:'post',
data:qs.stringify(data),
headers:{
'Content-Type':'application/x-www-form-urlencoded' // 指定x-www-form-urlencoded類型
}
}).then(res => {console.log(res)})
這裏我們先用qs序列化
服務端同樣用body-parser處理
let bodyParser = require('body-parser') // 引入中間件
let urlencodedParser = bodyParser.urlencoded({extended:false} // 解析urlencoded類型
// 利用urlencodedParser 解析請求體
router.post('/getUserList', urlencodedParser , (req, res) => {
console.log(req.body)
let {id} = req.body
fs.readFile('user.json', 'UTF8', (err, data) => {
if (err) throw err
data = JSON.parse(data).filter(item => item.id == id)
res.send(data)
})
})
控制檯打印req.body
下一篇文章介紹: