YARN-5785. [YARN-3368] Accessing applications and containers list from Node page is throwing few exceptions in console. (Akhil P B and Sreenath Somarajapuram via Sunil G)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js
index eaddfcb..6d69828 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js
@@ -25,22 +25,14 @@
   serverName: "NM",
 
   urlForQuery(query) {
-    var extension = this.get("host").split('/').pop();
-    if (extension != query.nodeAddr) {
-      this.host = this.get("host") + query.nodeAddr;
-    }
     var url = this._buildURL();
-    url = url + "/apps";
+    url = url.replace("{nodeAddress}", query.nodeAddr) + "/apps";
     return url;
   },
 
   urlForQueryRecord: function (query) {
-    var extension = this.get("host").split('/').pop();
-    if (extension != query.nodeAddr) {
-      this.host = this.get("host") + query.nodeAddr;
-    }
     var url = this._buildURL();
-    url = url + "/apps/" + query.appId;
+    url = url.replace("{nodeAddress}", query.nodeAddr) + "/apps/" + query.appId;
     return url;
   },
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js
index 56c4bcd..0fff047 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js
@@ -25,22 +25,14 @@
   serverName: "NM",
 
   urlForQuery(query) {
-    var extension = this.get("host").split('/').pop();
-    if (extension != query.nodeHttpAddr) {
-      this.host = this.get("host") + query.nodeHttpAddr;
-    }
     var url = this._buildURL();
-    url = url + "/containers";
+    url = url.replace("{nodeAddress}", query.nodeHttpAddr) + "/containers";
     return url;
   },
 
   urlForQueryRecord(query) {
-    var extension = this.get("host").split('/').pop();
-    if (extension != query.nodeHttpAddr) {
-      this.host = this.get("host") + query.nodeHttpAddr;
-    }
     var url = this._buildURL();
-    url = url + "/containers/" + query.containerId;
+    url = url.replace("{nodeAddress}", query.nodeHttpAddr) + "/containers/" + query.containerId;
     return url;
   },
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js
index 7a0fc4a..5bcfc9a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js
@@ -25,11 +25,8 @@
   serverName: "NM",
 
   urlForFindRecord(id, modelName, snapshot) {
-    var extension = this.get("host").split('/').pop();
-    if (extension != id) {
-      this.host = this.get("host") + id;
-    }
     var url = this._buildURL();
+    url = url.replace("{nodeAddress}", id);
     return url;
   },
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-app.js
index 5945813..3dfd776 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-app.js
@@ -68,7 +68,7 @@
     // expected return response is of the form { data: [ {}, {} ] }
     var normalizedArrayResponse = {};
     // payload is of the form { "apps" : { "app": [ {},{},{} ]  } }
-    if (payload.apps) {
+    if (payload.apps && payload.apps.app) {
       normalizedArrayResponse.data = payload.apps.app.map(singleApp => {
           return this.internalNormalizeSingleResponse(store, primaryModelClass,
               singleApp);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-container.js
index a104f1e..bf19ad7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-container.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-node-container.js
@@ -54,7 +54,7 @@
       requestType) {
     // expected return response is of the form { data: [ {}, {} ] }
     var normalizedArrayResponse = {};
-    if (payload.containers) {
+    if (payload.containers && payload.containers.container) {
       // payload is of the form { "containers" : { "container": [ {},{},{} ]  } }
       normalizedArrayResponse.data =
           payload.containers.container.map(singleContainer => {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
index c5dbbea..70d4ebc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
@@ -27,6 +27,6 @@
       timeline: 'ws/v1/applicationhistory',
       cluster: 'ws/v1/cluster',
       metrics: 'ws/v1/cluster/metrics',
-      node: 'ws/v1/node'
+      node: '{nodeAddress}/ws/v1/node'
     },
 };