先上报错图:
由于我的前端框架采用了VueElementAdmin,这个框架内置了mockJS的模拟数据。所以我默认也采用了这个配置。
写于2022-07-24 23:08:
下面文章仅供参考。目前而言,在不使用MockJS的情况下(尤其是那个mockserver.js),不管怎么配,是不会有问题的。但是一旦混合引入,就会出问题。下面文章仅供参考,关键是你是否引用了mockServer。
import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: 'http://127.0.0.1:95', // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
export default service
const express = require('express')
const server = express()
const startServer = () => {
server.use(express.json())
server.use(express.urlencoded({ extended: true }))
server.post('/home/login', (req, resp) => {
console.log(req.query)
resp.send({
code: 200
})
})
const { port, hostName } = $serverConfig
server.listen(port, hostName, () => {
console.log(`服务已经启动:http://${ hostName }:${ port }`)
})
}
'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
function resolve(dir) {
return path.join(__dirname, dir)
}
const name = defaultSettings.title || 'vue Admin Template' // page title
const port = process.env.VUE_APP_PORT
const baseApi = process.env.VUE_APP_BASE_API
const targetApi = process.env.VUE_APP_TARGET_API
const pathRewrite = process.env.VUE_APP_REWRITE_PATH
module.exports = {
publicPath: '/',
outputDir: 'dist',
assetsDir: 'static',
lintOnSave: process.env.NODE_ENV !== 'production',
productionSourceMap: false,
devServer: {
port: port,
open: true,
overlay: {
warnings: false,
errors: true
},
proxy: {
[baseApi]: {
target: targetApi,
changeOrigin: true,
pathRewrite: {
['^' + baseApi]: pathRewrite
}
}
},
before: require('./mock/mock-server.js')
}
}
# just a flag
ENV = 'development'
VUE_APP_ENV='development'
# base api
VUE_APP_BASE_API = '/dev-api'
VUE_APP_REWRITE_PATH = ''
# 页面服务端口
VUE_APP_PORT = 4310
# 目标转发地址
VUE_APP_TARGET_API='http://127.0.0.1:95'
分析
axios默认的header里面的content–type就是application/json。然后后端的解析也是json形式。可是采用了这个mockJS的mock–server后改变了传输形式,导致不能识别。解决办法也很简单,在axios创建的时候指定header的content–type:
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 5000, // request timeout
headers: {
'Content-Type': 'application/json; charset=UTF-8;'
}
})
然后express那边可以不用配接收的header,默认是识别content–type的,当然配置也可以,可以使用下面的模板,增加中间件:
server.all("*", function (req, res, next) {
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", "*")
//允许的header类型
res.header("Access-Control-Allow-Headers", "*")
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "*")
res.header("Access-Control-Allow-Credentials", "true")
if (req.method.toLowerCase() == 'options') {
res.send(200) //让options尝试请求快速结束
} else {
next()
}
原文地址:https://blog.csdn.net/cjs1534717040/article/details/125868375
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_18067.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。