Node.js 公共静态文件夹,用于为 js 提供 utf-8 字符集
Posted
技术标签:
【中文标题】Node.js 公共静态文件夹,用于为 js 提供 utf-8 字符集【英文标题】:Node.js public static folder to serve js with utf-8 charset 【发布时间】:2012-12-15 05:51:18 【问题描述】:我正在使用 node.js 和 express 将静态 javascript 文件提供给单页应用程序。 在 node.js 服务器代码中,我使用 express.static 来允许公共访问文件夹
app.use(express.static(__dirname + '/public/'));
在客户端,我使用$.getScript
来获取存储在public文件夹中的JavaScript文件,例如:
$.getScript("js/init.js");
当我尝试获取一些带有重音字母或某些 UTF-8 特殊字符的 JavaScript 文件时,我得到了奇怪的字符,而不是我想要的。
在我定义公用文件夹时有什么方法可以设置字符集吗?
【问题讨论】:
您确定您的 init.js 文件保存在 utf8 中吗? 或者只是没有字符? :) 【参考方案1】:What's the simplest way to serve static files using node.js? 的回答提示我在静态之前插入您自己的中间件。
下面的代码找到*.js
文件并将字符集设置为utf-8。
app.use(function(req, res, next)
if (/.*\.js/.test(req.path))
res.charset = "utf-8";
next();
);
app.use(express.static(__dirname + '/public/'));
执行此操作后,查找以下响应标头。
Content-Type: application/javascript; charset=utf-8
【讨论】:
这是一个很好的答案;当使用superagent
测试从 Express 静态服务器检索到的 .JS 文件的文本时,这实际上救了我,因为 superagent
不会返回文件的文本,除非它具有 UTF-8 编码。
您还可以使用 Node.js path
库获得更具表现力的条件。 var path = require('path'); if (path.extname(req.path) === '.js') // it's JS
【参考方案2】:
在您的 html 页面中,编码必须与资源文件的编码相同(或相反)
确保在 head 部分设置元标记:
<meta charset='utf-8'></meta>
【讨论】:
以上是关于Node.js 公共静态文件夹,用于为 js 提供 utf-8 字符集的主要内容,如果未能解决你的问题,请参考以下文章
Node.js Express js在较大文件上提供静态文件的速度非常慢