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 11.1k 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.
    • MichMichM Offline
      MichMich Admin @KirAsh4
      last edited by MichMich

      @KirAsh4 it hasnt got anything to do with a file. It’s just a request, if you want to respond with the contents of a file, you need to do that yourself or use the following method if you want to feed a full folder:

      this.expressApp.use("/foobar" + this.name, this.expressApp.static(this.path + "/foobar"));
      
      1 Reply Last reply Reply Quote 0
      • KirAsh4K Offline
        KirAsh4 Moderator
        last edited by

        No, it doesn’t have anything to do with the contents. It has to do with where that file resides on the physical system. For example, a request to a default Apache installation will look for a file in '/var/www/html/' or '$USER/public_html' or whatever the system admin has configured it as. In this case, this is a specific request through the Node.js system, being called by MM, so where does it look for that file? Within the user’s folder? Within MM’s installation folder? Within the actual module’s folder? Or does Node.js allow access to the entire file system? So that if I do a call such as:

        this.expressAp.use("/etc/passwd")
        

        will I actually get the contents of the system’s '/etc/passwd' file, or is going to try to read '/path/to/MM-install/etc/passwd' or some other path?

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

        1 Reply Last reply Reply Quote 0
        • MichMichM Offline
          MichMich Admin
          last edited by

          I’ve got the feeling we’re talking about something different.

          The example:

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

          does not serve any file. So talking about file location doesn’t make any sense in this case. In this example It just serves the text string GET request to /foobar

          In the second example:

          this.expressApp.use("/foobar" + this.name, this.expressApp.static(this.path + "/foobar"));
          

          only the express.static(root, [options]) part refers to a file or folder. The root argument refers to the root directory from which the static assets are to be served.

          More info about express.static can be found here: http://expressjs.com/en/api.html#express.static

          KirAsh4K 1 Reply Last reply Reply Quote 0
          • KirAsh4K Offline
            KirAsh4 Moderator @MichMich
            last edited by

            @MichMich said in readFileSync:

            The root argument refers to the root directory from which the static assets are to be served.

            That’s part of the answer I was looking for. Specifically, 'from which the static assets are to be served'. Now to figure out where those are, or where they are allowed to be rather. Basically I’m looking at it from a security stand point. Where is this thing going to allow a user to get to, to fetch a file.

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

            1 Reply Last reply Reply Quote 0
            • M Offline
              mattlugar @KirAsh4
              last edited by

              @KirAsh4 Yeah, it is working for me as I want it. I figured it wouldn’t be overly useful to others anyhow since there was a lot of back-end work to do (namely setting up json streams that match the module code from the weather station, uploading to an appropriate location).

              Screenshot of my current display is below. It updates every 5 seconds using data from my local Davis weather station running Cumulus software. The rain information (total daily rain on top left, current rain rate at bottom left) only display if there has been rain today or it is currently raining respectively. It will also display winds like “12 G23” if the winds hit gust criteria (over 18MPH gusts and more than 10MPH over the wind speed). It is pretty trivial to put any information you can get into the json file to display.

              I’d be happy to try to properly modularize this if there is some interest, there’s just so many options and variations of stations/json exports/etc that I’m not sure I’d know where to start.

              alt text

              1 Reply Last reply Reply Quote 0
              • 1
              • 2
              • 2 / 2
              • First post
                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