express - 如何解决全栈应用程序中的 CORS 策略问题
问题描述
我正在构建一个 MEVN 堆栈应用程序,但由于跨源策略,我无法从前端向服务器发出请求。我已经为所有路由启用了cors中间件,但是没有生效。我还尝试将它单独应用于每条路线并指定原点,但仍然没有效果。
index.js:
const express = require('express')
const cors = require('cors')
const mongoose = require('mongoose')
const BanksController = require('./controllers/BanksController')
const OfficesController = require('./controllers/OfficesController')
const PORT = process.env.PORT || 3000
mongoose.connect(process.env.DB, { useNewUrlParser: true, useUnifiedTopology: true });
const app = express()
app.use(cors({ origin: 'http://localhost:3001' }))
app.get('/api/banks', BanksController.index)
app.get('/api/offices', OfficesController.index)
app.listen(PORT, () => console.log('Listening on port ' + PORT))
ajax 请求:
axios.get('localhost:3000/api/banks')
.then(res => console.log(res))
.catch(err => console.log(err))
解决方案
尝试改变这个:
axios.get('localhost:3000/api/banks')
对此:
axios.get('http://localhost:3000/api/banks')
请注意错误消息如何抱怨协议方案。
问题不在于您的服务器。问题是使用localhost:3000
Treatslocalhost:
作为一种方案。“方案”是第一个冒号之前的 URL 位。
您甚至不会在开发人员工具的网络部分看到请求,因为浏览器不知道如何发出localhost:
“请求”。
推荐阅读
- python - 当按值选择任何标签时,BeautifulSoup 仅返回标签的文本,期望返回完整的标签
- typescript - 如何将元组类型转换为联合?
- javascript - 如何解析 JavaScript 数据
- angular - 错误:node_modules/@angular/material/form-field/index.d.ts 中的指令 MatFormFieldControl 没有选择器,请添加
- c# - 属性的属性继承在 C# 中失败
- c - 禁用算术优化的 gcc 标志
- javascript - 如何将多个属性传递给 React 中的 onChange 处理程序?
- java - Java - 如何找到在 Student 类中编写方法的得分最高的学生?
- python - 总结休假的数量
- wordpress - Wordpress:创建列出所有帖子的下拉列表?