MagicMirror² v2.11.0 is available! For more information about this release, check out this topic.
READ THE CHANGELOG BEFORE UPDATING!

How can i pass query / parameters from URL to module


  • Module Developer

    Dear Developers,

    i want to redesign one of my modules. Therefore i need a hint how i can make the following possible.

    I want to pass a query / parameters from a module URL, f.e.

    http://IPofMM:8080/MMM-Navigate/index?value1=xxx&value2=yy
    

    to my module.
    What do i need?

    1. a page in my module folder index.js(?)
    2. code do read the values of querystring and do something with it.

    Maybe somebody can give me a tip how to do that or in which module it was already realized (except MMM-Remote-Control).

    Regards

    AxLED



  • @AxLed sorry. not quite sure what you mean…

    u want to pass the info from where (how is the user presenting this info) to where


  • Module Developer

    @sdetweil
    User is presenting / entering datas by URL in his browser and module should be able to handle the datas.
    AxLED



  • @AxLed and did u setup an express path that invokes your node module function?

    the url parms should be there


  • Module Developer

    @sdetweil
    No i didnt set any path so far, but express path seems to be the right search word and helps.
    If i understood the documentation right, express path has to be located in node_helper.js.
    But i still dont know how to move forward with this information.
    Are there some modules which are using express path, where i can try to figure out how it works?

    Greetings

    AxLED

    I



  • @AxLed MMM-ImagesPhotos uses it…

    the Module wants to use request, so issues a request to a local server (express path)
    which invokes the routine to get the list of photos//

    (instead of doing the sendSocketNotification to the node_module…)

    the express routine is like a cgi pgm invocation…

    from
    https://expressjs.com/en/guide/routing.html

    Route parameters

    the path can autoparse the url
    Route path: /users/:userId/books/:bookId
    Request URL: http://localhost:3000/users/34/books/8989
    req.params: { “userId”: “34”, “bookId”: “8989” }

    but the result, net, is the parms are in the req (uest) parameter object when the routine is called


  • Module Developer

    @sdetweil
    Thanks for the response, it think now i have enough to read and i will try to get in up and running.

    I will give feedback within the next day.

    AxLED



  • @AxLed cooll… standing by!



  • @AxLed so, it should be as simple as

    const express = require('express')
    
    // setup server path handler, for http get request
    this.expressApp.get("/MMM-Navigate",(req,res) =>{this.someFunction(req,res)});
    
    // handler dump request object
    someFunction: function(request,response){
         console.log("request data="+JSON.stringify(request))
        response.send("Hello from MMM-Navigate");
    }
    

  • Module Developer

    Here is another example of express;

    const express = require('express')
    const bodyParser = require('body-parser')
    
    // in your member function of node_helper.js, usually it will be `.start()`
    
    this.expressApp.use(bodyParser.json())
    this.expressApp.use(bodyParser.urlencoded({extended: true}))
    var process = (req, res) => {
      var subpath = req.params.subpath
      if (CHECK_SOME_CONDITION) {
        var requestObj = {
          path: subpath,
          query: req.query,
          post: req.body,
          method: req.method,
        }
        this.sendSocketNotification("REQUEST_COMING", requestObj)
        res.status(200).send({status: 200})
      } else {
        res.status(400).send({status: 400})
      }
    }
    
    this.expressApp.get("/YOUR_PATH/:subpath", process)
    this.expressApp.post("/YOUR_PATH/:subpath", process) // when you need POST method.
    

Log in to reply