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

React+Node+Express项目中font-face报ERR_ABORTED 500错误求助

解决React + Express项目中自定义字体加载500错误的问题

看起来你已经把CSS的引用链路理清楚了,组件能识别font-face规则但加载字体失败,这个500错误通常是服务器无法找到或无法提供字体文件导致的。结合你的技术栈(React + Node/Express),我整理了几个最可能的原因和对应的解决方案:

1. 资源路径错误(最常见)

React项目里,/src/...这种绝对路径在浏览器端会指向服务器的根目录(比如http://localhost:3000/src/...),但默认情况下:

  • 如果用Create React App搭建的项目,src目录是被webpack处理的源码目录,服务器不会直接暴露这个目录给浏览器访问,所以浏览器请求这个路径会返回500。
  • 如果是自定义Express服务器,除非你特意配置了src目录的静态资源托管,否则服务器也不知道要怎么处理这个请求。

解决方案:

方法A:使用public目录(推荐)

React项目的public目录是专门存放静态资源的地方,服务器会默认把这个目录作为静态资源根目录:

  1. 把你的字体文件移动到public/fonts目录下(没有的话手动创建fonts文件夹)
  2. 修改index.css中的@font-face规则:
@font-face {
  font-family: Montserrat-Black;
  src: url(/fonts/montserrat-black.ttf); /* 这里的/直接指向public目录 */
}

方法B:使用相对路径(针对src目录内的资源)

如果不想移动字体文件,确保你的index.css在src目录下,那么可以用相对路径指向字体文件:

@font-face {
  font-family: Montserrat-Black;
  src: url('./resource/font/montserrat-black.ttf'); /* 相对于index.css的位置 */
}

2. Express服务器未配置静态资源托管

如果你是自己搭建的Express服务器,而不是用Create React App的默认服务器,那么需要手动告诉Express哪些目录是可以公开访问的静态资源:
在你的Express入口文件(比如server.js)中添加以下代码:

const express = require('express');
const app = express();

// 托管public目录为静态资源根目录
app.use(express.static('public'));

// 如果你的字体确实放在src/resource/font下,也可以单独托管这个目录(不推荐,建议用public)
// app.use('/src/resource/font', express.static('src/resource/font'));

3. 文件名/路径拼写或大小写问题

检查字体文件的实际文件名是否和CSS中写的完全一致,比如是否把Montserrat-Black.ttf写成了montserrat-black.ttf(部分系统区分文件名大小写),或者路径里的文件夹名称拼写错误(比如resource写成了resources)。

4. 文件权限问题

如果是在Linux/macOS环境下,确保字体文件的权限允许服务器读取:
可以通过终端执行以下命令修改权限:

chmod 644 /path/to/your/font/montserrat-black.ttf

验证方法

直接在浏览器地址栏输入字体文件的完整URL(比如http://localhost:3000/fonts/montserrat-black.ttf),如果能正常下载或预览字体文件,说明路径和服务器配置没问题;如果还是报错,继续排查上面的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:47:54