【发布时间】:2020-01-20 12:31:43
【问题描述】:
我定义了我的 Express js 应用:
const express = require('express')
var history = require('connect-history-api-fallback');
const path = require('path')
const http = require('http')
const socketio = require('socket.io')
require('./db/mongoose')
const userRouter = require('./routers/user')
const publicDirPath = path.join(__dirname, '../public')
const app = express()
app.use(express.static(publicDirPath))
app.use(history({
index: '../public/index.html'
}))
app.use(express.static(publicDirPath))
app.use(express.json())
app.use(userRouter)
const server = http.createServer(app)
const io = socketio(server)
io.on('connection', socket => {
console.log('New WebSocket connection')
socket.on('join', () => {
socket.emit('message', 'Welcome to the app')
})
})
module.exports = server
然后我将它用于我的 index.js 文件:
const app = require('./app')
const port = process.env.PORT
app.listen(port, () => {
console.log(`Server is up on port ${port}`)
})
当我运行应用程序并从同一个端口发送请求时 - 一切正常。但是当我尝试从不同的本地主机端口发送请求时,即。 8080,我收到跨源错误。 我尝试安装 cors 包并按如下方式使用它:
const cors = require('cors')
app.options('*', cors())
app.use(cors());
得到了同样的结果。
我尝试将配置传递给 cors:
app.use(cors({
origin: 'http://localhost:8080'
}));
仍然得到相同的结果。
我做错了什么,我该如何让它发挥作用?
【问题讨论】:
-
看看expressjs.com/en/resources/middleware/cors.html,它展示了如何使用
cors()(与您尝试过的不同)。 -
"但是当我尝试从不同的 localhost 端口发送请求时" -> 你到底是什么意思?您能否确认您没有尝试访问非侦听端口?看起来你的应用只监听
process.env.PORT,显然没有其他端口可以工作。 -
@Mike'Pomax'Kamermans 是的,我看到了。我认为它基本上是一样的,但是我必须将我的 Express 应用程序传递给 http.createServer 因为 socket.io
-
@fingeron 当我从 localhost:8080(Vue 应用程序)向快递服务器发送 axios 请求时,我收到此错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5555/users/login. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).localhost:5555 是我的快递服务器运行的地方。