代码之家  ›  专栏  ›  技术社区  ›  Igal

允许CORS进入NodeJS

  •  0
  • Igal  · 技术社区  · 5 年前

    我定义了我的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());
    

    得到了同样的结果。

    app.use(cors({
      origin: 'http://localhost:8080'
    }));
    

    结果还是一样。

    我做错了什么?我该怎么做?

    2 回复  |  直到 5 年前
        1
  •  0
  •   fingeron    5 年前

    让我们花点时间用简单的词来解释“起源”是什么。

    当用户浏览网站时,他使用一个地址。 通常,该地址是一个域,但当我们运行测试时,我们主要使用本地IP。

    用户曾经访问过网站

    总之,为了让CORS工作, 确保您允许用户用于访问HTTP服务的地址 .

    http://localhost:8080 ,并从它调用 http://localhost:5555 ,您需要在所述HTTP服务上执行此操作:

    app.use(cors({
      origin: 'http://localhost:8080'
    }));
    
        2
  •  0
  •   Palash Gupta    5 年前

    当您的前端应用程序尝试向express服务器发出请求时,

    快速服务器正在阻止该请求,因为快速服务器不知道该请求的源(即前端服务器)

    你可以通过 cors