为什么Node.js无法提供.woff文件

时间:2012-11-14 04:22:12

标签: node.js http nginx

我出于某些网络原因在中国从Google网络字体中下载了.woff文件。以前我在Github Pages上尝试了@font-face并且它有效。但是这次我花了一个小时才找到破碎的地方。

我使用Node来提供mime的静态文件,content-type似乎是application/x-font-woff,我的代码在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()

由于Github Pages上content-type的{​​{1}}为.woff,我只是在我的代码中将该行传达给它以使其相同..但它仍然失败:

application/octet-stream

最后,我切换到Nginx服务器来提供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() 文件..最后它开始工作。

但我如何在Node上修复它?

1 个答案:

答案 0 :(得分:3)

在此行中,fs.readFileSync(filepath, 'utf8')编码设置为'utf8'。它必须是'binary'

此外,res.end(file_content)函数需要传递正确的编码。试试res.end(file_content, 'binary')

我有同样的问题,不得不自己解决,这个答案似乎不存在于任何地方。