Showing results for 
Search instead for 
Did you mean: 
Showing results for 
Search instead for 
Did you mean: 

Node.js Rest API example- how to display data from the local network in Vuforia Studio project?

No ratings

In this article  we have the same start point/state as described in “How to read sensors via Rest API call in and display it Vuforia Studio experience project?”… but with one significant difference ->the sensors URLs are not visible for the Thingworx service. The problem is that the sensors values should be requested via Rest API calls in a local intranet. This means that the end devices are connected to a local router and have IP valid only in the local WLAN. Othersides the router   have also internet access. The end devices could connect to  the Experience Server and could download e.g.  the experience. The sensor URL and rest API call should be some thing like:


var url="";


So, it means the IP address of the device, where the value should be requested via Rest API calls is not visible from outside of the local WLAN and the Rest API call could done only inside the local network.

So here we can use a node.js program (service)  which will request the sensors and will send the values to Thingworx. So the main loop is an interval callback function “requestFunction” which is called - here in example  every 5 seconds. It will read the sensors data via Rest API fetch call . In this example the data is called from  a local test web server (it simulates an edge device) . For the test I used 2 server URLs  wich require parametrs

here the the user_id is random value 1...10 and  the resonse returns a json object  with some properties


here the the id is random value 1...200 and the response  returns also a  json object  with some properties


var http = require('http')
var https = require('https')
const fetch = require('node-fetch')
var request = require("request")

var userId = 1 //could be from 1 to  10
var todosId = 1 //could be 1 -200
function requestFunction() {
    userId = Math.floor((Math.random() * 10) + 1)
    todosId = Math.floor((Math.random() * 200) + 1)

    fetch('' + userId)
        .then(response => response.json())
        .then(json => {
            setPropValue("profession", json["profession"])
            setPropValue("userName", json["name"])
            setPropValue("userId", json["id"])
            setPropValue("userPassword", json["password"])
    fetch('' + todosId)

        .then(response => response.json())
        .then(json => {
            setPropValue("message", json["title"])
// ==============================================
setInterval(requestFunction, 5000) //every 5 sec


If we need information about what  the  syntax of the Rest API is  to   set/ change the value of the thing property - for this  we can  check  the  REST API Reference Guide:

Property values access:


 When we review the code above we can see that there is function “setPropValue” which should set a value to a particular property. Here the twx server:port is The Thingname is  “REST_API_EDGE”


function setPropValue(propName, propValue) {

    var options = {
        method: 'PUT',
        url: '',
        headers: {
            // use here the user appKey who created the Thing /here REST_API_EDGE
            appKey: 'fxxx7x4a-19x4-4xx3-bxxxa-9978a8xxxx17x', //appkey for the user
            'Content-Type': 'application/json'
        body: { PROPNAME: 'XXXXXXX' },
        json: true
    //this will make a string from the option json and will replace the 
 // place holder “PROPNAME” by function argument propName 
     var str_temp = JSON.stringify(options).replace(/PROPNAME/g, propName)
   //this will replace place placeholder XXXXXXX by function argument propVaule
 // and will convert the string back to json
    options = JSON.parse(str_temp.replace(/XXXXXXX/g, propValue))
    console.log("option in setPropValue:")
    request(options, function(error, response, body) {
       //print the return code – success is 200
        console.log("response.statusCode=" + response.statusCode)
        if (error) {
            console.log("error in request");
            throw new Error(error);
// =================================================



The code was generated with the REST API client POSTMAN. We can use this tool to test some Rest API calls in the POSTMAN GUI , where we could use some more confortable functionality for testing and debugging . When the call is working in the POSTMAN UI we can export it to different programming formats (javaScript, nodeJs etc. - means it  will  generate here a  javaScript code for postprocessing. When we start the script (above) we can verify that the property values will change every 5 seconds.




The best way now to bind the data in Vuforia studio is via the External DATA panel




Afterwards  we can test in the Preview and later on the end device:




Version history
Last update:
‎Jun 30, 2019 08:48 PM
Updated by:
Labels (1)