前端为vue3(组合式写法),数据处理端为node.js,使用express()框架
解决方法1:
前端使用axios请求
代码如下:
import axios from 'axios';
const response = await axios.post(`${baseurl}/api/regist`, reqBody);
console.log('Response from POST:', response.data);
后端代码:
const express = require("express")
const authRouter = require("./router/authRouter")
// 创建web服务器
const app = express()
app.listen(8070, () => {
console.log("express serve at 8070")
})
//挂载路由
app.use("/api",authRouter)
请求时会报错查找不到原因为浏览器的跨域需要使用cors来解决跨域
const express = require("express")
const cors = require('cors');
const authRouter = require("./router/authRouter")
// 创建web服务器
const app = express()
// 允许所有源的跨域请求
// 使用 express.json() 中间件来解析 JSON 格式的请求体
app.use(cors());
app.use(express.json());
app.listen(8070, () => {
console.log("express serve at 8070")
})
//挂载路由
app.use("/api",authRouter)
如果不使用中间件解读请求体,会一直导致请求体为空,原因为:
在使用 Express 框架处理 HTTP 请求时,express.json()
中间件的作用是将请求体解析为 JSON 格式。如果不使用这个中间件,Express 默认不会自动解析请求体中的 JSON 数据,而是以原始的数据流的形式处理请求体。
因此,如果你没有使用 express.json()
中间件,那么在处理 POST、PUT 或 PATCH 请求时,你将无法直接从 req.body
中获取到 JSON 格式的数据。相反,你需要手动处理请求流,并根据请求头中的 Content-Type 来判断请求体的格式,然后进行适当的解析操作。
使用 express.json()
中间件后,Express 会自动解析请求体中的 JSON 数据,并将其转换为 JavaScript 对象,然后将其存储在 req.body
中,方便你在路由处理函数中直接访问和操作这些数据。(这就意味着这样写只能读取json格式的请求体,字符串或其他形式的console.log(req.body)为undefined)
解决方法2:
vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
// 由于版本问题,需要3.4.0版本
chainWebpack: config => {
config.plugin('define').tap(args => {
args[0]['__VUE_PROD_HYDRATION_MISMATCH_DETAILS__'] = false;
return args;
});
},
//主要为下面的
devServer: {
port:8081,
proxy: {
"/api": {
target: "http://192.168.2.32:8070",
changeOrigin: true,
pathRewrite: {
"^/api": "",
},
},
},
},
})
请求界面
import axios from 'axios';
axios.defaults.baseURL='/api'
const response = await axios.post('/api/regist', reqBody);
nodejs端依然要使用
// 使用 express.json() 中间件来解析 JSON 格式的请求体
app.use(express.json());