您好,登录后才能下订单哦!
本文小编为大家详细介绍“node后端与Vue前端跨域问题怎么处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“node后端与Vue前端跨域问题怎么处理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
先看后端的入口文件:
app.js
const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors') const expressJWT = require('express-jwt') const app = express(); const users = require('./routes/users') const config = require('./config') app.use(expressJWT({secret: config.jwtSecretKey}).unless({path: [/^\/api\/users/]})) // const db = require('./db/index') app.use(cors()) app.use(express.urlencoded({extended: false})) app.use(bodyParser.json()) app.get('/', (req, res) => { res.send('hello world !') }) app.use('/api/users', users) const testRouter = require('./routes/testToken') app.use('/my', testRouter) const profiles = require('./routes/profiles') app.use('/api/profiles', profiles) app.use((err, req, res, next) => { if (err) return res.send({status: 400, message: err}) if(err.name === 'UnauthorizedError') return res.send({status: 404, message: '身份认证失败'}) res.send({status: 404, message: err}) }) app.listen(5000, () => { console.log('api server running at http://127.0.0.1:5000') })
代码不少,但重要的就下面这几行:
const cors = require('cors') app.use(cors())
前提条件是你得先安装了cors,这样写好之后,就保证你的后端接口可以跨域访问了。
前端要发起ajax请求,可以在入口文件main.js中全局挂载axios,而后端的接口则最好写在axios.defaults.baseURL
中
main.js
import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import router from './router' import axios from './http' Vue.use(ElementUI); axios.defaults.baseURL = 'http://127.0.0.1:5000/api/' Vue.prototype.$axios = axios; Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app')
注意注意注意,最重要的代码是:axios.defaults.baseURL = 'http://127.0.0.1:5000/api/'
这行代码是前端项目能跨域的关键
注意import axios from './http'
引入的是我自己写的http.js
http.js
import axios from "axios"; import { Message, Loading } from 'element-ui'; let loading; function startLoading(){ loading = Loading.service({ lock: true, text: '数据加载中', background: 'rgba(0,0,0,0.7)' }) } function endLoading(){ loading.close(); } // 请求拦截 axios.interceptors.request.use(config => { startLoading(); return config }, error => { return Promise.reject(error) }) //响应拦截 axios.interceptors.response.use(response => { endLoading(); return response }, error => { endLoading(); Message.error(error.response.data) return Promise.reject(error) }) export default axios
这里写了一些请求拦截和请求响应的代码,也可以不写,主要是有一些请求的动画。这个文件主要的作用是引入了axios
methods: { submitForm(formName) { this.$refs[formName].validate(valid => { if (valid) { this.$axios .post("/users/register", this.registerUser) .then(res => { // 注册成功 this.$message({ message: "注册成功!", type: "success" }); // this.$router.push("/login"); }); } else { console.log("error submit!!"); return false; } }); } }
这就是常规的axios请求了
post("/users/register", this.registerUser)
可以保证请求到http://127.0.0.1:5000/api//users/register
中后端接口的数据,这里是post请求,即向后端提交数据。
读到这里,这篇“node后端与Vue前端跨域问题怎么处理”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。