You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Axios和CORS无法从Fastify Node服务器获取数据的问题

问题:Fastify配置CORS后仍出现跨域错误

我近期使用Fastify搭建了一个Node服务器,尝试通过Axios与React前端进行集成,同时在后端配置了@fastify/cors以允许跨域访问,但仍出现CORS相关错误。Node服务器、Docker和React应用均已正常运行,怀疑是Node代码中的CORS注册配置或React中api调用的问题,检查过地址并参考Fastify CORS文档但未解决。

Node服务器代码

import fastify from 'fastify'
import cookie from '@fastify/cookie'
import websocket from '@fastify/websocket'
import { createPoll } from './routes/create-poll'
import { getPoll } from './routes/get-poll'
import { voteOnPoll } from './routes/vote-on-poll'
import { pollResults } from './ws/poll-results'
import cors from '@fastify/cors'

const app = fastify()

app.register(cors, {
    origin: true
})

app.register(cookie, {
    secret: "polls-app-nlw-lrc",
    hook: 'onRequest',
})

app.register(websocket)

app.register(createPoll)
app.register(getPoll)
app.register(voteOnPoll)
app.register(pollResults)

app.listen({port: 3333}).then(()=> {
    console.log('HTTP server running!')
})

React中Axios相关代码

import axios from "axios"

const api = axios.create({
    baseURL: 'http://localhost:3333'
  })

export function Select(){
    api.get('/polls/:pollId').then( (response) => {
        console.log(response)
    })

    return()}

解决步骤

1. 修正Axios请求的路径参数错误

你的React代码中直接使用占位符:pollId作为请求路径,Axios不会自动解析该占位符,会导致请求路径变为/polls/:pollId,后端可能返回404,浏览器易将此错误与CORS混淆。需替换为实际投票ID:

// 静态ID示例
api.get('/polls/123').then(response => {
    console.log(response);
});

// 动态传入ID示例
const pollId = 'your-real-poll-id';
api.get(`/polls/${pollId}`).then(response => {
    console.log(response);
});

2. 明确CORS的origin配置

origin: true虽会自动允许请求来源,但在Docker网络、多端口环境等场景可能识别异常,建议直接指定前端运行地址:

app.register(cors, {
    origin: 'http://localhost:3000', // 替换为你的React应用实际端口
    credentials: true // 若需携带Cookie,必须开启此选项
});

生产环境可设置为具体域名或正则表达式匹配允许的域名。

3. 确认Docker端口映射与网络

若Node服务运行在Docker容器中,需确保容器3333端口已正确映射到主机,且React应用访问的localhost:3333能指向容器内服务。若使用自定义Docker网络,可能需要用容器名称或内部IP替代localhost。

4. 查看具体CORS错误信息

打开浏览器开发者工具(F12),在控制台或网络面板查看完整CORS错误提示,比如是Access-Control-Allow-Origin不匹配,还是缺少Access-Control-Allow-Credentials等响应头,根据提示调整配置。

5. 检查插件注册顺序

确保@fastify/cors插件在所有路由插件之前注册,保证全局CORS配置覆盖所有路由。当前代码中CORS注册顺序正确,但需确认后续路由插件未单独设置CORS规则导致冲突。


内容的提问来源于stack exchange,提问作者Lucca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:50:36