1、問題;
vue
項目前台用axios
發請求;由於之前也是一直用axios
發請求,所以這一次遇到問題一臉懵逼;
-
請求方式:
delete
;請求頭類型:'application/json;charset=utf-8'
后台我用的是
nodejs
和express
-
解決:
axios
的請求頭設置錯誤;-
錯的設置;
const _Axios = axios.create({ headers: { 'Content-Type': 'application/json,charset=utf-8' } })
-
正確的設置;
const _Axios = axios.create({ headers: { 'Content-Type': 'application/json;charset=utf-8' } }) // 或者 axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8'
修改
application/json,charset=utf-8
后的,
為;
就可以了,后台就成功收到參數了;不設置也是可以的,因為默認就是
application/json;charset=utf-8
-
-
擴展:
1、get請求:GET 請求不存在請求實體部分,鍵值對參數放置在 URL 尾部,瀏覽器把form數據轉換成一個字串(name1=value1&name2=value2...),然后把這個字串追加到url后面用?分割,加載這個新的url。因此請求頭不需要設置 Content-Type 字段。 2、post請求:headers中有content-type這個字段一般包括:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml。
2、express接受參數;
如果是用express.router()
的方式設計路由,那么你在接受參數時:
-
對於get請求來說可以在
req.query
中獲取url后面的參數:router.get('/note', (request, response, next) => { console.log(request.query) })
-
對於post請求來說,在不使用其它插件的情況下,只能采用原生獲取參數的方法;
// 'Content-Type': 'application/json;charset=utf-8' router.post(/\/(add|import)/, (request, response, next) => { let body = '' request.on('data', function (chunk) { body += chunk // chunk是二進制數據 }) request.on('end', function (result) { console.log(result, '====', body, JSON.parse(body)) // 轉化為對象 }) })
body就是獲取的參數,然后y用JSON.parse(body)進行解析。
-
使用插件
body-parser
const bodyParser = require('body-parser') const app = new express(); app.use(bodyParser.json()) ... router.post('/note', (request, response, next) => { console.log(request.body) })
然后就直接可以在
req.body
中來獲取請求過來的參數了。 -
req.params
// 適合獲取production后的id:http://localhost:3000/production/id router.get('/note', (request, response, next) => { console.log(request.params) })