2016-06-19 70 views
1

未定義的JSON從URL api端點http : // someserver:someport/some_api_url?_var1=1返回到Node.js/Express.js應用程序。這個未定義的JSON輸入將始終具有相同的格式,並且需要通過接收代碼投射到新的JSON對象中(如下所示)。然後可以用各種方式處理新的JSON對象,包括傳遞給HTML。將未定義的JSON投射到新的JSON對象中


THE OP問題:
需要下面的代碼,以便於進行什麼具體的變化:

1)中的{"1":"descriptive string"}形式JSON被鑄造成一個新定義的JSON對象稱爲dataElement有兩個屬性,dataElement.dataKeydataElement.descriptionString

2.)發送回用戶的Web瀏覽器的HTML響應包括在UI格式dataElement.dataKeydataElement.descriptionString

Index is: 1 
Description is: descriptive string 


示例代碼來進行修改:
對於初學者來說,代碼需要進行修改是:

app.get('/', function (req, res) { 

    var url = 'http://someserver:someport/some_api_url?_var1=1' 

    http.get(url, function (resInner) { 
    var body = ''; 

    resInner.on('data', function (chunk) { 
     body += chunk; 
    }); 

    resInner.on('end', function() { 
     var fullResponse = JSON.parse(body); 

    // code to parse JSON into new JSON object, which is passed into HTML 
    var indexStr = key; 
    var descriptionStr = fullResponse[key]; 
    var dataElement = {"dataKey" : key, "descriptionString" : descriptionStr}; 
    var htmlResp = 'Index is: '+${dataElement.dataKey}+'<br> Description is: '+${dataElement.descriptionString}; 
    res.send(htmlResp); 

    }); 
}).on('error', function (e) { 
    console.log("Got an error: ", e); 
}); 

}); 


當前ER ROR:
此刻,上面的代碼是給下面的錯誤:

/home/user/nodejs_apps/express_helloworld/myapp/app.js:139 
     var htmlResp = 'Index is: '+${dataElement.dataKey}+'<br> Description is: '+${dataElement.descriptionString}; 
          ^
SyntaxError: Unexpected token { 
    at exports.runInThisContext (vm.js:53:16) 
    at Module._compile (module.js:387:25) 
    at Object.Module._extensions..js (module.js:422:10) 
    at Module.load (module.js:357:32) 
    at Function.Module._load (module.js:314:12) 
    at Function.Module.runMain (module.js:447:10) 
    at startup (node.js:142:18) 
    at node.js:939:3 
+0

'key'從哪裏來? – adeneo

+0

所以你有一個在其他地方定義的變量'key',然後API返回有效的JSON,其中一個鍵實際上與你設置的'key'變量相同爲 – adeneo

+0

因此,你沒有'鍵變量呢? – adeneo

回答

1

錯誤是從你的字符串連接,這似乎是使用一些無效的模板語言來和key變量,沒有定義,你必須實際上Object.keys等拿到鑰匙

嘗試這種方式,而不是

app.get('/', function(req, res) { 

    var url = 'http://someserver:someport/some_api_url?_var1=1' 

    http.get(url, function(resInner) { 
     var body = ''; 

     resInner.on('data', function(chunk) { 
      body += chunk; 
     }); 

     resInner.on('end', function() { 
      var fullResponse = JSON.parse(body); 

      // code to parse JSON into new JSON object, which is passed into HTML 
      var keys  = Object.keys(fullResponse); 
      var firstKey = keys[0]; 
      var descriptionStr = fullResponse[firstKey]; 
      var dataElement = { 
       "dataKey": firstKey, 
       "descriptionString": descriptionStr 
      }; 
      var htmlResp = 'Index is: ' + dataElement.dataKey + '<br> Description is: ' + dataElement.descriptionString; 

      res.send(htmlResp); 
     }); 
    }).on('error', function(e) { 
     console.log("Got an error: ", e); 
    }); 

}); 
0

在這個例子中,你是TR你可以使用template strings,但是你使用不正確,導致錯誤。這是模板字符串的格式:

`Hello World, the expression "1+2" evaluates to ${1+2}` ==> `Hello World, the expression "1+2" evaluates to 3` 

模板字符串使用反引號,用於在SE處插入內聯代碼。所以,你的問題行應該是這個樣子:

var htmlResp = `Index is: ${dataElement.dataKey}`<br> Description is: `${dataElement.descriptionString}`; 

除此之外語法錯誤,我看不出任何問題與您的代碼,但誰知道? ;)

希望我能幫上忙!