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在较大文件上提供静态文件的速度非常慢

尝试提供静态 JS 文件 Node.js,错误 404

使用 restify (node.js) 提供静态文件

静态文件,带有 Node.js 和 Express 的样式表

如何在本地通过 Node.js 提供静态文件?

节点 JS 不提供静态图像