包含 CSS 的文件和未在服务器上提供的 JS 文件并打印 ��U��v��8��+
File with CSS and JS files not serving on server and prints ��U�v�8��+
当我 运行 我的 hapijs 应用程序在本地工作时它可以工作,但是当我将它部署在服务器中时它不工作。该页面可以提供 html 文件,但如果 HTML 文件有 css 或 bootsrap 那么它会打印奇怪
像 ��U��v��8��+
这样的符号
显示奇怪响应的 link:https://us-central1-fir-app-85853.cloudfunctions.net/v1/teacher/list
这是我的 index.js 文件。
我该如何解决这个问题?
'use strict';
const functions = require('firebase-functions');
const api = require('./server');
exports.v1 = functions.https.onRequest(async (event, resp) => {
let server = await api.startServer();
const options = {
method: event.httpMethod,
headers: event.headers,
url: event.path,
payload: event.body
};
return server
.inject(options)
.then(response => {
delete response.headers['content-encoding']
delete response.headers['transfer-encoding']
response.headers['x-powered-by'] = 'hapijs'
resp.set(response.headers);
return resp.status(response.statusCode).send(response.result);
})
.catch(error => resp.status(500).send(error.message || "unknown error"));
});
这是我在 github https://github.com/kartikgreen/hapijs-firebase
上的完整源代码
这很可能是字符编码问题。
有几个原因,一个是输出的字符编码与 UTF-8 不同。
假设您的文档输出为 ISO-8859-1(称为 Latin-1),如果您不设置字符集,浏览器将默认为 UTF-8。把它想象成输出中文然后要求语言解析器将其视为日语,它永远不会理解!
不确定如何在 hapjs 中执行此操作,但在 PHP 中您只需添加一个 header,如下所示:-
header("Content-Type: text/html; charset=ISO-8859-1");
另一个可能的原因是 Byte Order Mark (BOM)。
如果您的脚本在它应该之前不小心输出了一些空白数据,这可以添加这些不可见的字符。
Stack Overflow 上有很多关于 BOM 的答案,所以我不会重复这些。
我通常会说 运行 通过 W3C Internationalisation Checker 的页面,但您的页面似乎将其杀死(这可能归结为 firebase)。也许您可以将原始输出捕获到一个文件中,然后 运行 通过这种方式?
我刚刚删除了请求 headers' object 中的 'accept-encoding': 'gzip, deflate, br' 行以不请求 gzip 压缩。
此答案已在 link
当我 运行 我的 hapijs 应用程序在本地工作时它可以工作,但是当我将它部署在服务器中时它不工作。该页面可以提供 html 文件,但如果 HTML 文件有 css 或 bootsrap 那么它会打印奇怪 像 ��U��v��8��+
这样的符号显示奇怪响应的 link:https://us-central1-fir-app-85853.cloudfunctions.net/v1/teacher/list
这是我的 index.js 文件。
我该如何解决这个问题?
'use strict';
const functions = require('firebase-functions');
const api = require('./server');
exports.v1 = functions.https.onRequest(async (event, resp) => {
let server = await api.startServer();
const options = {
method: event.httpMethod,
headers: event.headers,
url: event.path,
payload: event.body
};
return server
.inject(options)
.then(response => {
delete response.headers['content-encoding']
delete response.headers['transfer-encoding']
response.headers['x-powered-by'] = 'hapijs'
resp.set(response.headers);
return resp.status(response.statusCode).send(response.result);
})
.catch(error => resp.status(500).send(error.message || "unknown error"));
});
这是我在 github https://github.com/kartikgreen/hapijs-firebase
上的完整源代码这很可能是字符编码问题。
有几个原因,一个是输出的字符编码与 UTF-8 不同。
假设您的文档输出为 ISO-8859-1(称为 Latin-1),如果您不设置字符集,浏览器将默认为 UTF-8。把它想象成输出中文然后要求语言解析器将其视为日语,它永远不会理解!
不确定如何在 hapjs 中执行此操作,但在 PHP 中您只需添加一个 header,如下所示:-
header("Content-Type: text/html; charset=ISO-8859-1");
另一个可能的原因是 Byte Order Mark (BOM)。
如果您的脚本在它应该之前不小心输出了一些空白数据,这可以添加这些不可见的字符。
Stack Overflow 上有很多关于 BOM 的答案,所以我不会重复这些。
我通常会说 运行 通过 W3C Internationalisation Checker 的页面,但您的页面似乎将其杀死(这可能归结为 firebase)。也许您可以将原始输出捕获到一个文件中,然后 运行 通过这种方式?
我刚刚删除了请求 headers' object 中的 'accept-encoding': 'gzip, deflate, br' 行以不请求 gzip 压缩。
此答案已在 link