• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

readFileSync

Scheduled Pinned Locked Moved Development
17 Posts 3 Posters 9.9k Views 1 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    mattlugar
    last edited by May 17, 2016, 8:43 PM

    I’ll preface this by saying I’m fairly new at nodejs, so maybe I’m doing something totally stupid. I’ve been beating my head on this for a while now… Not making any sense to me whatsoever, googling like crazy and still totally stuck.

    I have bigger plans (reading a locally updated JSON file and displaying frequently updated data to the screen), but as nothing seemed to work I kept paring and paring the project back to where I’m now simply trying to display static contents of a local file to the screen. I altered helloworld to try to do this simple task. Note that the file ‘/home/pi/test.txt’ is simply the word “test”, and has permissions set to where anyone can read it. I’m also loading other modules just so I know something’s working.

    The following code locks up the mirror, displaying simply a black screen. Note that I am not even attempting to display the file at this point, I’m simply trying to load it into the variable ‘file’.

    Module.register("helloworld",{
    
            getDom: function() {
                    var wrapper = document.createElement("div");
                    var file = require('fs').readFileSync('/home/pi/test.txt', 'utf8');
                    wrapper.innerHTML = "Hello";
                    return wrapper;
            }
    });
    

    I can tell that the issue is my loading line because I can comment it out thusly and all the modules display, including the “Hello” text:

    Module.register("helloworld",{
    
            getDom: function() {
                    var wrapper = document.createElement("div");
    //              var file = require('fs').readFileSync('/home/pi/test.txt', 'utf8');
                    wrapper.innerHTML = "Hello";
                    return wrapper;
            }
    });
    

    OK, so maybe there’s a problem with my loading statement. Easy to check, copy/past the line into a js file and run it:

    test.js:

    var file = require('fs').readFileSync('/home/pi/test.txt', 'utf8');
    console.log(file);
    

    And here’s what happens:

    pi@lugarpi:~ $ nodejs test.js
    test
    

    Works perfectly fine in nodejs but if I put that line of code into the module it locks up the mirror. Am I missing something here? Also, I’m launching mirror through pm2. I understood any errors should show up in ~/.pm2/logs but the error log doesn’t show anything.

    1 Reply Last reply Reply Quote 0
    • M Offline
      MichMich Admin
      last edited by May 18, 2016, 8:53 AM

      What does it lockup? The fronted? Or the backend?

      If it’s just the frontend, check your webinspector/console to see what’s going on.

      M 1 Reply Last reply May 18, 2016, 2:26 PM Reply Quote 0
      • M Offline
        mattlugar @MichMich
        last edited by May 18, 2016, 2:26 PM

        That’s where my lack of knowledge on how to debug in this new environment was hurting me. Was able to figure out a better way to debug and now have something to work with.

        Uncaught ReferenceError: require is not defined
        

        Off to roll up my sleeves and do some mad google-fu.

        Thank you! :)

        1 Reply Last reply Reply Quote 0
        • K Offline
          KirAsh4 Moderator
          last edited by May 18, 2016, 6:18 PM

          That’s because require isn’t part of JavaScript. It’s part of node.js to load modules. There are potentially other ways of doing what you’re trying to do. You may want to check out this post on Stack Overflow.

          A Life? Cool! Where can I download one of those from?

          1 Reply Last reply Reply Quote 0
          • M Offline
            mattlugar
            last edited by May 19, 2016, 12:54 AM

            Yeah, I went about it differently than I wanted to. I ended up porting everything to an apache directory so it serves itself as a webapp. Had a few bugs to work out (it was locking up if the json was in the middle of writing when it was retrieved) but I have it working and bug free now best I can tell :)

            1 Reply Last reply Reply Quote 0
            • K Offline
              KirAsh4 Moderator
              last edited by May 19, 2016, 3:55 PM

              I suppose that’s one way to do that … doesn’t make it very portable or sharable to others. It’s no longer contained within only MM and Node.js … But, if it’s working for you and does what you want, that’s the only thing that matters.

              A Life? Cool! Where can I download one of those from?

              M 1 Reply Last reply May 19, 2016, 7:04 PM Reply Quote 0
              • M Offline
                MichMich Admin
                last edited by May 19, 2016, 5:04 PM

                Just so you know, the node_helper can serve files as well: https://github.com/MichMich/MagicMirror/tree/master/modules#thisexpressapp

                1 Reply Last reply Reply Quote 0
                • K Offline
                  KirAsh4 Moderator
                  last edited by May 19, 2016, 5:11 PM

                  I saw that when I was fiddling with some other stuff, but never actually tested it. Is that path relative to the actual module location? Or MM’s installation? Or the user that’s running MM? So if '/foo/bar/baz' is defined, where does it start?

                  /foo/bar/baz? (OH PLEASE SAY NO, for the love of all that is sacred, tell me Node.js does NOT allow system reads like that!)
                  $HOME/foo/bar/baz ?
                  $HOME/MagicMirror/foo/bar/baz?
                  $HOME/MagicMirror/modules/foo/bar/baz?
                  $HOME/MagicMirror/modules/<MODULE>/foo/bar/baz?
                  

                  A Life? Cool! Where can I download one of those from?

                  1 Reply Last reply Reply Quote 0
                  • M Offline
                    MichMich Admin
                    last edited by May 19, 2016, 5:22 PM

                    If you are referring to this snippet:

                    start: function() {
                        this.expressApp.get('/foobar', function (req, res) {
                            res.send('GET request to /foobar');
                        });
                    }
                    

                    The /foobar is referring to the url: http://localhost:8080/foobar

                    1 Reply Last reply Reply Quote 0
                    • K Offline
                      KirAsh4 Moderator
                      last edited by May 19, 2016, 5:30 PM

                      Ah, so it’s still an HTTP call then, not a simple fileread from disk.

                      A Life? Cool! Where can I download one of those from?

                      1 Reply Last reply Reply Quote 0
                      • 1
                      • 2
                      • 1 / 2
                      1 / 2
                      • First post
                        6/17
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy