axios中post请求json和application/x-www-form-urlencoded详解

Axios中POST请求JSON和application/x-www-form-urlencoded详解

什么是POST请求?

POST请求是HTTP协议中的一种请求方式,在请求体中携带需要传输的数据。可能被用于编辑、更新、上传等操作。POST请求方式相对于GET请求方式来说,更加安全和灵活,所以在实际开发中被广泛使用。

axios中POST请求的两种方式

1. JSON方式

JSON 方式发送 POST 请求时,请求体中数据采用 JSON 格式传输。一般不需要添加 Content-Type 请求头,因为 axios 默认会使用此种方式。

代码示例如下:

axios.post('/api', {foo: 'bar'})
    .then(response => {
        console.log(response.data)
    })
    .catch(error => {
        console.log(error)
    })

2. application/x-www-form-urlencoded 方式

application/x-www-form-urlencoded 方式发送 POST 请求时,请求体中数据采用 key-value 的形式传输。为了支持此种方式,需添加 Content-Type 请求头,值为 application/x-www-form-urlencoded。

代码示例如下:

axios({
    method: 'post',
    url: '/api',
    data: qs.stringify({foo: 'bar'}),
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
    .then(response => {
        console.log(response.data)
    })
    .catch(error => {
        console.log(error)
    })

示例说明

示例一

场景:通过 POST 请求方式提交表单数据。

假设:有一个注册页面,用户需要填写以下信息:用户名、密码、性别、邮箱。

前端代码示例如下:

<form action="/register" method="post">
    <label>用户名:<input type="text" name="username"></label><br>
    <label>密码:<input type="password" name="password"></label><br>
    <label>性别:<input type="radio" name="gender" value="male">男
        <input type="radio" name="gender" value="female">女</label><br>
    <label>邮箱:<input type="text" name="email"></label><br>
    <input type="submit" value="注册">
</form>

后台代码示例如下:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

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

app.post('/register', (req, res) => {
    console.log(req.body)
    // do something ...
    res.send('OK')
})

app.listen(3000, () => {
    console.log('Server is running at port 3000...')
})

前端采用默认JSON方式发送POST请求,不需要添加 Content-Type 请求头。

代码示例如下:

axios.post('/register', formData)
    .then(response => {
        console.log(response.data)
    })
    .catch(console.error)

示例二

场景:通过 POST 请求方式上传图片。

假设:有一个上传页面,用户需要选择一张图片进行上传。

前端代码示例如下:

<form enctype="multipart/form-data" action="/upload" method="post">
    <label>选择图片:<input type="file" name="image"></label><br>
    <input type="submit" value="上传">
</form>

后台代码示例如下:

const express = require('express')
const multer = require('multer')
const upload = multer({dest:'/tmp/'})

const app = express()

app.post('/upload', upload.single('image'), (req, res, next) => {
    console.log(req.file)
    res.send('OK')
})

app.listen(3000, () => {
    console.log('Server is running at port 3000...')
})

前端采用 application/x-www-form-urlencoded 方式发送 POST 请求,需要添加 Content-Type 请求头。

代码示例如下:

axios({
    url: '/upload',
    method: 'post',
    data: formData,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
    .then(response => {
        console.log(response.data)
    })
    .catch(console.error)

以上是使用axios进行POST请求时需要注意的两种方式及使用场景的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:axios中post请求json和application/x-www-form-urlencoded详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue动态实现评分效果

    下面就是 “Vue动态实现评分效果” 的完整攻略。 1. 了解评分组件的实现细节 评分组件是一个很常见的组件,在 Vue 中实现起来也比较简单。我们可以通过 v-for 指令渲染出固定个数的星星图标,然后通过绑定 @click 事件来处理星星的选中状态,进而实现评分效果。具体实现步骤如下: 首先,我们需要定义一个数组 starList 来存储星星的显示状态,…

    Vue 2023年5月27日
    00
  • Vue实现指令式动态追加小球动画组件的步骤

    下面是Vue实现指令式动态追加小球动画组件的步骤: 第一步:创建小球动画组件 首先,在Vue中创建一个小球动画组件(例如Ball组件),可以使用CSS3实现小球的动画效果。以下是一个简单的Ball组件示例: <template> <div class="ball-container"> <div class=…

    Vue 2023年5月28日
    00
  • vue 如何实现表单校验

    下面是 “Vue 如何实现表单校验” 的完整攻略。 使用 Vue.js 实现表单校验 Vue.js 做为一款流行的前端框架,提供了很好的表单校验的支持。Vue.js 2.x 版本提供了 “v-model” 指令和 “validate” 方法,可以让我们快速方便地实现表单校验。 下面将介绍两个示例,来详细讲解 Vue.js 如何实现表单校验。 示例一:基础校验…

    Vue 2023年5月27日
    00
  • 详解如何使用vue和electron开发一个桌面应用

    以下是详解如何使用vue和electron开发一个桌面应用的完整攻略: 1. 准备工作 首先需要安装Node.js和npm,然后使用npm安装vue-cli和electron: npm install -g vue-cli npm install -g electron 2. 创建一个基础的Vue项目 在命令行输入vue init webpack my-el…

    Vue 2023年5月27日
    00
  • 微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)

    微信小程序MUI侧滑导航菜单示例 微信小程序中,实现侧滑导航菜单是一个常见的需求。常见的导航菜单可以分为三种:弹出式(Popup)、覆盖式(Overlay)和抽屉式(Drawer)。对于简单的需求,我们可以使用MUI框架中提供的侧滑组件来实现。下面我们详细介绍如何使用MUI实现弹出式的导航菜单。 使用MUI实现侧滑导航菜单 首先需要在小程序的app.json…

    Vue 2023年5月27日
    00
  • vue3的ref、isRef、toRef、toRefs、toRaw详细介绍

    请听我为您详细介绍vue3中ref、isRef、toRef、toRefs、toRaw的作用和用法。 一、ref ref是Vue3提供的一个响应式数据类型,将非响应式数据转换为响应式数据。 ref接收一个参数,返回的是一个对象,通过修改对象的value属性来更新数据。 import { ref } from ‘vue’ const count = ref(0)…

    Vue 2023年5月28日
    00
  • 微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb

    针对“微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb”的问题,我会给出完整的攻略步骤,具体如下: 一、问题背景 在开发微信小程序过程中,我们经常需要设置导航栏底部的tabBar,其中每个icon的大小不得超过40KB。一旦超过了这个限制,开发者工具和真机都将无法显示对应的icon图标。 二、解决方案 对…

    Vue 2023年5月27日
    00
  • JS实现把鼠标放到链接上出现滚动文字的方法

    实现在鼠标放置在链接上时出现滚动文字的效果,可以使用JavaScript中的DOM事件和CSS的样式设置。 步骤1:编写HTML页面代码 首先,在HTML页面中创建一个链接元素,并设置该元素的class为“link”。 <a href="#" class="link">Roll over me</a&…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部