Pourquoi Node.js n’a pas pu fournir les fichiers .woff

J’ai téléchargé le fichier .woff à partir de fonts Web Google pour une raison de réseau en Chine. Auparavant, j’ai essayé @font-face sur Github Pages et ça marche. Mais cette fois il m’a fallu une heure pour trouver où était cassé.

J’utilise Node pour servir des fichiers statiques avec mime , et le content-type semble être application/x-font-woff , et mon code dans CoffeeScript:

 exports.read = (url, res) -> filepath = path.join __dirname, '../', url if fs.existsSync filepath file_content = fs.readFileSync filepath, 'utf8' show (mime.lookup url) res.writeHead 200, 'content-type': (mime.lookup url) res.end file_content else res.writeHead 404 res.end() 

Comme le content-type de content-type de .woff sur Github Pages est application/octet-stream , je viens juste de mettre cette ligne dans mon code pour la rendre identique. Mais cela a toujours échoué:

 exports.read = (url, res) -> filepath = path.join __dirname, '../', url if fs.existsSync filepath file_content = fs.readFileSync filepath, 'utf8' show (mime.lookup url) # res.writeHead 200, 'content-type': (mime.lookup url) res.end file_content else res.writeHead 404 res.end() 

Enfin, je suis passé à un serveur Nginx pour servir le fichier .woff .. et finalement il a commencé à fonctionner.

Mais comment puis-je résoudre ce problème sur Node?

Dans cette ligne, fs.readFileSync(filepath, 'utf8') le codage est défini sur 'utf8' . Il doit être 'binary' .

De plus, la fonction res.end(file_content) doit passer le bon encodage. Essayez res.end(file_content, 'binary') .

J’avais le même problème et je devais le découvrir moi-même, cette réponse ne semble pas exister en ligne.