我有一个 Angular 项目和为 Angular 项目提供服务的 ExpressJS Web 服务器。
我在 Angular 中使用了自定义字体,创建了这样的字体:
@font-face {
font-family: 'Branda';
src: url('../public/fonts/Branda-yolq.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
如果我在本地检查角度项目(使用 ngserve),就会出现字体。但是,如果我构建项目(ng build),并将 dist 文件夹复制到网络服务器,然后启动,则字体不会加载。 我收到以下错误:
无法解码下载的字体:http://localhost:5000/media/Branda-yolq-PC7QOVZG.ttf OTS解析错误:无效的sfntVersion:1008821359
这是我的网络服务器的 app.js:
const express = require("express");
const path = require("path");
const app = express();
const port = 5000;
var cors = require('cors');
app.use(cors({
origin: [ 'https://localhost:4200' ]
}));
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
app.get('*', (req, res) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
var pattern = new RegExp('(.css|.html|.js|.ico|.jpg|.jpeg|.png)+$', 'gi');
if (pattern.test(req.url)) {
res.sendFile(path.resolve(__dirname, `dist/istivirag/browser${req.url}`));
} else {
res.sendFile(path.resolve(__dirname, 'dist/istivirag/browser/index.html'));
}
});
var feedbackRouter = require('./routes/feedback');
app.use('/api/feedback', feedbackRouter);
app.listen(port, () => {
console.log('Example app running on port ${port}');
});
module.exports = app;
我看到了很多这样的问题,但似乎没有什么可以解决我的问题。有什么想法吗?
Agar aapko Stack Overflow par Angular aur ExpressJS ka 使用 karte Hue OTS(沙箱外) 解析错误 ka samadhan dena hai,以利基 ek 通用解决方案 likha gaya hai jo kaafi 场景 mein kaam karega。 Aap ise apne jamab ke roop mein use kar sakte hain:
OTS(沙箱外)解析错误 tab hota hai jab Angular 应用程序 mein koi 外部字体 ya 样式表加载 karte samay 浏览器 usse sahi tarike se 解析 nahi kar pata。是啊,错误 aksar tab aata hai jab:
Aapko 确保 karna hoga ki aap ExpressJS ka 使用 karte Hue apne 静态资源(字体、样式等)ko sahi MIME 类型 aur CORS ke sath 服务 kar rahe hain。
静态中间件配置Karein: 确保 karein ki aap 静态文件(如
fonts
、css
)为 karne ke liye Express ka 中间件使用 kar rahe hain:
const express = require('express');
const path = require('path');
const app = express();
// Serve static files
app.use(express.static(path.join(__dirname, 'dist/your-angular-app')));
app.use('/assets', express.static(path.join(__dirname, 'assets')));
// Default route for Angular
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/your-angular-app/index.html'));
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
CORS 启用 Karein: Agar 字体 ya 外部资源 ko 服务 karte samay CORS 问题 ho raha hai 到 usse 修复 karne ke liye CORS 中间件添加 karein:
const cors = require('cors');
app.use(cors({
origin: '*', // Update this to your allowed origin
}));
正确的 MIME 类型确保 Karein: 字体服务 karte waqt 确保 karein ki 正确的 MIME 类型设置。琼脂手动设置karna pade,给yeh中间件添加karein:
app.use((req, res, next) => {
if (req.path.endsWith('.woff2')) {
res.setHeader('Content-Type', 'font/woff2');
}
next();
});
构建文件生成Karein: Angular ke liye
ng build
ka 使用 karke 生产就绪构建生成 karein aur usse 服务 karein:
ng build --prod
浏览器控制台检查Karein: 琼脂问题 ab bhi 坚持 kare,到浏览器 ke 控制台我检查 karein ki kaunsa 资源加载 nahi ho raha。 Uske 基础 par aapko 解决方案调整 karna padega。
angular.json
)检查karein aur字体ko资产我添加karein。Yeh 步骤 aksar OTS 解析错误以解决 kar dete hain。琼脂 aapke paas 特定错误详细信息 hain,以 unke 基础 par aur 重点解决方案 diya ja sakta hai。