Read the statement by Michael Teeuw here.
How to load config data from file?
-
@sdetweil Attention, the fs module is (obviously) not available in the server only mode.
-
Here’s my attempt that does not work:
this line causes the error: var myfs = require(‘fs’)
what am I doing wrong ?pi@raspberrypi:~/MagicMirror $ cat my.json { "clockmodule": { "showDate": true, "displayType": "both" } }
and config.js
var myfs = require('fs') //var myconfig = JSON.parse(myfs.readFileSync('./my.json', 'utf8')) var config = { .... modules: [ { module: "clock", position: "top_left", //showDate: myconfig.module_clock["showDate"], //displayType: myconfig.module_clock["displayType"], },
-
@acimail01 This is because the
require
function is not available in the browser. Are you using the server only mode? -
no, it is the kiosk mode. but I also tried the serveronly mode.
-
@acimail01 Start MagicMirror in debug mode with
npm start dev
, it will open the developer tools. Then look for any red lines in the console.If you can’t find the developer tools you can open it with
CTRL-SHIFT-I
-
Error message is:
Uncaught ReferenceError: require is not defined at config.js:15 -
@acimail01 Ok, I just got an idea.
Place your json somewhere in the
config
folder and place the following function in yourconfig.js
.function loadJSON(filePath) { if (typeof module !== "undefined") { return require(filePath); } else { try { return JSON.parse($.ajax({ type: "GET", url: filePath, async: false }).responseText); } catch (e) { console.error(e); return {}; } } }
And call it like:
modules: [ loadJSON("config/clock.json") ]
This function will synchronisly load the given JSON, serializes it and returns it. This code is completly untestet, but it should work anyway:)
Edit: I just updated my answer to also work with node.js
-
thank you but wont work also.
Error:
ReferenceError: $ is not defined at loadJSONI want to have all API keys and passwords from a common location and not scattered in the config.js, Hence the thought with a (yml) file.
maybe this can be solved via an array variable in the config.js or similar. -
@acimail01 Ok, we can fix the
$ is not defined at loadJSON
.Replace the function with the following which uses good old XMLHttpRequest:
fuction loadJSON(filePath) { if (typeof module !== "undefined") { return require(filePath); } else { try { var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", filePath, false); xmlhttp.send(); if (xmlhttp.status === 200) { return JSON.parse(xmlhttp.responseText); } else { throw "Unexpected status code!"; } } catch (e) { console.error(e); return {}; } } }
-
Did you manage to make this work? I’m trying to do kinda the same.
Thanks