• 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.

Stuck trying to sendSocketNotification from my node_helper

Scheduled Pinned Locked Moved Troubleshooting
4 Posts 2 Posters 455 Views 2 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.
  • S Offline
    seeshaughnessy
    last edited by Oct 8, 2020, 10:22 PM

    I must be doing missing something obvious, but I’ve been at this forever. Sorry if the code looks rough, but I’m new to coding and still have some learning to do…

    I was able to get my requests just fine when I used axios and async/await (I’m most familiar with this library). I’m trying to convert the code to use the request library that’s built into Magic Mirror, but I can’t figure out what I’m doing wrong.

    I’m able to get the array I need with the request.get, but none of the code after my console.log('Result: ', result); // check seems to be working. I can’t log my filteredParcels, and the notification is not being sent.

    Am I missing something silly? Or is my whole concept incorrect?

    getOneTracker: function () {
        // Authenticate and get token
        var options = {
          uri: 'https://api.onetracker.app/auth/token',
          method: 'POST',
          json: {
            email: this.config.username,
            password: this.config.password,
          },
        };
    
        request(options, function (error, response, body) {
          if (!error && response.statusCode == 200) {
            const authToken = body.session.token;
    
            const options = {
              uri: 'https://api.onetracker.app/parcels',
              json: true,
              headers: {
                'x-api-token': authToken,
              },
            };
    
            request.get(options, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                let result = body.parcels;
                console.log('Result: ', result); // check
    
                const filteredParcels = result.filter((parcel) => {
                  this.getDaysToReceive(parcel);
                });
    
                this.sendSocketNotification('ONETRACKER_RESULT', filteredParcels);
    
              }
            });
          }
        });
    
    
      },
    
      // Returns days left until delivery, null if delivered 1+ days ago, and ? if delivery is unknown
      getDaysToReceive: function (parcel) {
        const parcelStatus = parcel.tracking_status;
        const parcelDate = parcel.tracking_time_estimated;
        const parcelDay = parcelDate.substr(8, 2); //Get day from tracking data
        var today = new Date().toString().substr(8, 2); //Get todays date
        const daysToDelivery = parcelDay - today;
    
        if (parcelStatus != 'delivered' && daysToDelivery < 0) return '?';
        if (parcelStatus != 'delivered' && daysToDelivery >= 0)
          return daysToDelivery;
        if (parcelStatus == 'delivered' && daysToDelivery == 0) return '0';
        return;
      },
    
    S 1 Reply Last reply Oct 8, 2020, 10:28 PM Reply Quote 0
    • S Away
      sdetweil @seeshaughnessy
      last edited by Oct 8, 2020, 10:28 PM

      @seeshaughnessy the problem is what the ‘this’ pointer points to

      inside the request callback, ‘this’ points to the request, NOT the node_helper data.

      this is why we assign ‘this’ to a variable ‘self’ BEFORE calling request, and then use self. inside the callback instead of this.

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 0
      • S Offline
        seeshaughnessy
        last edited by Oct 8, 2020, 11:05 PM

        Darnit, that makes total sense! Thank you!

        S 1 Reply Last reply Oct 8, 2020, 11:31 PM Reply Quote 0
        • S Away
          sdetweil @seeshaughnessy
          last edited by sdetweil Oct 8, 2020, 11:32 PM Oct 8, 2020, 11:31 PM

          @seeshaughnessy you can continue to use axios. preferred as request has been depreciated.

          just add it to your package.json to get it loaded w your module

          # create package.json
          npm init -y
          # install a library and record it
          npm install axios --save
          #
          

          in your module folder

          Sam

          How to add modules

          learning how to use browser developers window for css changes

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