前端同学如何根据post接口传递参数的三种不同情况情况写接口

1.不带参数的post接口

//引入第三方模块express
const express = require('express');
//相当于调用了express函数得到一个 app
const app = express();
//路由
app.post('/api/post', function(req, res) {
  // 直接返回对象
  res.send({ name: 'abc' });
});
//启动web服务器
app.listen('8088', () => {
  console.log('8088');
});

根据传递的参数的格式不同,将请求头分成三种情况:

  • 传递普通键值对

  • 传递json

  • 传递form表单(涉及文件上传)  前端同学如何根据post接口传递参数的三种不同情况情况写接口_第1张图片

    post接口-普通键值对参数

当content-type为x-www-form-urlencoded时,表示上传的普通简单键值对 ,用express.urlencoded()来获取请求体的参数。

const express = require('express')
const app = express()
//app.use使用中间件express.urlencoded()
// 增强express的功能,把x-www-form-urlencoded方式在请求体中传递的参数
// 自动收集到req.body中
app.use(express.urlencoded())
//app.use(....)之后,在res.body中就会多出一个属性res.body,参数自动收集到req.body中
app.post('/post', (req, res) => {
//2. 可以通过req.body来获取post传递的键值对	
  console.log('req.body', req.body);
  res.json({ msg: 'ok', 'data:': req.body })
})
// 开启服务器
server.listen(8080, function () {
  console.log('端口为8080的服务器已开启');
})

post接口-json格式的参数

当content-type为application/json;charset=utf8时,表示上传的json格式的参数 ,使用express.json()来获取请求体中传递的json数据。

const express = require('express')
const app = express()
//app.use使用中间件express.json()
// 增强express的功能:把json方式在请求体中传递的参数
// 自动收集到req.body中
app.use(express.json())
//app.use(....)之后,在res.body中就会多出一个属性res.body。
app.post('/postJSON', (req, res) => {
  console.log('req.body', req.body);
  res.json({ msg: 'ok', 'data:': req.body })
})
// 开启服务器
server.listen(8080, function () {
  console.log('端口为8080的服务器已开启');
})

post接口-form-data文件上传

当content-type为multipart/form-data时,表示上传的form-data格式的参数, 借助第三方 Multer(node.js 中间件 ) 来获取请求体中传递的json数据。 

const express = require('express')
const app = express()
// 1. 引入包
const multer = require('multer');
// 2. 配置
const upload = multer({dest:'uploads/'}) // 上传的文件会保存在这个目录下
// uploads表示一个目录名,你也可以设置成其它的

// 3. 使用
// 这个路由使用第二个参数 .upload.single表示单文件上传, 'cover' 表示要上传的文件在本次上次数据中的键名。对应于前端页面上的:
//  

app.post("/postfile", upload.single('cover'),(req, res) => {
    // req.file 记录了文件上传的信息
    // req.body 记录了其它普通参数(非文件)的信息
	// 其它操作
 console.log('req.body', req.body);
  console.log('req.file', req.file);
  res.json({ msg: 'ok', 'data': req.body, 'file': req.file })
})
// 开启服务器
server.listen(8080, function () {
  console.log('端口为8080的服务器已开启');
})

总结

传参方式 前端 content-type 后端框架express
请求行 get方式 req.query
请求体 application/x-www-form-urlencode app.use(express.urlencoded()); req.body
请求体 application/json app.use(express.json()); req.body
请求体 multipart/form-data 1. 引入包 const multer = require('multer'); 2. 配置app.post('/apiname', upload.single(), req.body)

你可能感兴趣的:(node.js,json)