【发布时间】:2015-09-15 15:18:34
【问题描述】:
我有一个相当复杂的设置,需要网络浏览器本地存储填充计算机名称,以便应用程序正常工作。为了做到这一点,我从配置文件中读取:
kiosk-name: Mort
我在启动 node.js 网络服务器时读取了配置文件:
var filesys = require('fs');
var os = require('os');
filesys.readFile(project_path + '/kiosk.cfg', 'utf8', function(err, data) {
var kioskname;
if (err) {
//console.log(err);
kioskname = os.hostname();
} else {
var configArray = data.split(':');
if('' != configArray[1]) {
kioskname = configArray[1];
} else {
kioskname = os.hostname();
}
}
});
所有这些都按设计工作,在未填充配置文件时使用计算机的 os.hostname() 作为默认值。
客户端具有一个基本页面 (index.html),它将默认页面 (default.html) 加载到 iframe 中。基于 websocket 消息系统,默认页面被来自远程 IP 的另一个页面替换。 在旧版本的系统中(在实现配置文件之前)我们可以使用以下代码设置本地存储元素:
var win = document.getElementsByTagName('iframe')[0].contentWindow;
win.postMessage(JSON.stringify({key: 'kiosk-name', data: kioskName}), "*");
我们在收到 websocket 消息时识别 iframe,然后发送包含 JSON 字符串的 post 消息以设置本地存储元素。在这种情况下,kioskName 是一个包含硬编码值的变量。
问题
现在我们希望从配置文件中读取值,我们需要一种将 kioskname 传递给客户端 JavaScript 的方法,以便我们可以在 iframe 中设置本地存储元素。
我尝试将文件读取功能放在export 包装器中:
(function(exports){
// file reading code here
return kioskname;
})(typeof exports === 'undefined' ? this['kioskname']={} : exports);
我遇到了一个错误:
Uncaught ReferenceError: require is not defined
在export 函数中放置一个静态值(没有require 允许导出功能正常工作,但不允许我读取需要os 和@ 的配置文件987654334@ 个模块。
如何将配置文件返回的值保存到可以在客户端使用它来设置本地存储元素的位置?
【问题讨论】:
标签: javascript node.js iframe