跨域,预检请求,post请求

前端为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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值