node.js后端及Vue前端跨域解决方案

从目前我了解的情况来看,前后端跨域使用的方式有很多种,这里记录我使用最顺手的一种,即在后端使用cors跨域

node.js后端跨域解决方案

先看后端的入口文件:

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,这样写好之后,就保证你的后端接口可以跨域访问了。

前端vue项目

前端要发起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 = falsenew 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

前端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.js后端及Vue前端跨域解决方案相关推荐

  1. 如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题

    如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题 参考文章: (1)如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题 (2)https://www.cnblog ...

  2. 9种常见的前端跨域解决方案

    9种常见的前端跨域解决方案(详解) 2019.09.02 21:54 73879浏览 一.什么是跨域?   在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制. ...

  3. Vue 前端跨域的解决方案(心得记录)

    背景: 今天面试一面和二面都还ok,三面是两个小姐姐(工作性质应该是外包驻场,所以有甲方来面),简历上巴拉巴拉的简单聊了一下,到了关键了,小姐姐说问一下基础的东西(这也是最怕的,毕竟Vue我之前用的挺 ...

  4. WEB 前端跨域解决方案

    跨域定义 广义的定义:跨域是指一个域下的文档或脚本试图去请求另一个域下的资源. 1.) 资源跳转: 链接.重定向.表单提交 2.) 资源嵌入: <link>.<script>. ...

  5. js最全的十种跨域解决方案

    在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问 ...

  6. Vue项目 跨域 解决方案与 vue.config.js 配置解析

    为什么会出现跨域? 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说 ...

  7. cookies丢失 同域名_后端设置Cookie前端跨域获取丢失问题(基于springboot实现)

    1.跨域问题说明:后端域名为A.abc.com,前端域名为B.abc.com. 2.后端设置一个cookie发送给前台,domain应该是setDomain("abc.com"), ...

  8. Vue的跨域解决方案

    如何在vue里面优雅的解决跨域,路由冲突问题? 当我们在路由里面配置成一下代理可以解决跨域问题: proxyTable:{'/goods/*':{target:'http://localhost:30 ...

  9. 前端跨域的理解和解决跨域的方案详解(全)

    作为前端开发,我们遇到最多的应该就是跨域问题,对于萌新来说,跨域就是一道墙,不知所措,其实只要理解了跨域的含义和原理,解决它是不难的,今天给大家介绍下什么是跨域和跨域的解决方案! 什么是跨域? 跨域是 ...

最新文章

  1. pip install可能遇到的一些问题
  2. 杭电2055 另一种
  3. Java基本语法(10)--位运算符
  4. 《C++ Primer 5th》笔记(10 / 19):泛型算法
  5. java二维数组 内存分配_java中二维数组内存分配
  6. cannot be resolved or is not a field
  7. 有关分库分表你想知道的,都在这儿了
  8. 连连看外挂消去算法分析
  9. idea java sdk找不到指定文件路径_java-IntelliJ找不到任何声明
  10. 【Oracle】常用SQL
  11. ElasticSearch插件安装---Head ,Kopf与Bigdesk
  12. mysql 循环_MySQL存储过程中的3种循环【转载】
  13. i5 7200u 计算机专业,i5 7200U理论性能对比_笔记本评测-中关村在线
  14. 模型运行速度FPS测试以及参数Parameter计算代码
  15. java jbutton_Java JButton按钮使用
  16. 对于离散行业如何选型MES系统,你知道吗?
  17. 软件验收测试合格的标准
  18. 2022年中国数字科技专题分析
  19. 公众号头条文章数据接口 API
  20. 微信小程序 云开发之数据库-查找记录

热门文章

  1. Keil uVision5 5.38官方下载、安装及注册教程
  2. IOS查看包名、版本号、设备信息、签名、进程ID
  3. Sketch(一)——基础操作
  4. RSA概念详解及工具推荐大全 - lmn
  5. JAVA代码行数统计工具(是时候看看程序员真实的的代码量了)
  6. 【AI算法】数据分析
  7. 对比学习中的4种经典训练模式
  8. 数据分析师培训机构告诉你,如何成为优秀的数据分析师
  9. Linux多线程编程:pthread线程创建、退出、回收、分离、取消
  10. Backup Exec安装