2017-04-21 69 views
1

我有一個節點函數,它接收來自內部API的請求,做一些屬性分配,並吐出一個JSON響應。最初,我用一堆硬編碼常量進行設置,但我們決定將這些值移到存儲表中,以便我們不必更改函數本身的值,如果我們需要提高我們的值價格在未來。我按照創建存儲表的文檔,填充它,並配置我的函數來綁定它。據我所知,我正確地調用它,但我得到一個「TypeError:無法讀取屬性x」。這裏是我的function.js是什麼樣子:如何正確讀取表存儲綁定中的數據?

{ 
    "bindings": [ 
    { 
     "authLevel": "function", 
     "type": "httpTrigger", 
     "direction": "in", 
     "name": "req", 
     "methods": [ 
     "GET" 
     ] 
    }, 
    { 
     "type": "http", 
     "direction": "out", 
     "name": "res" 
    }, 
    { 
     "type": "table", 
     "name": "rate", 
     "tableName": "Rates", 
     "partitionKey": "Production", 
     "rowKey": "Standard", 
     "connection": "{TABLE_CONNECTION_STRING}", 
     "direction": "in" 
    } 
    ], 
"disabled": false 
} 

而且我index.js看起來像這樣:

module.exports = function (context, req) { 
    context.log('Processing mailing'); 

    if (req.query.number_of_pages && req.query.delivery_country) { 
     const first_page_special_domestic = context.bindings.rate.first_page_special_domestic; 
     const addtl_page_special_domestic = context.bindings.rate.addtl_page_special_domestic; 
     const express_domestic = context.bindings.rate.express_domestic; 
     const certified = context.bindings.rate.certified; 
     const tracking = context.bindings.rate.tracking; 
     const registered = context.bindings.rate.registered; 
     const return_envelope = context.bindings.rate.return_envelope; 
     const first_page_special_international = context.bindings.rate.first_page_special_international; 
     const addtl_page_special_international = context.bindings.rate.addtl_page_special_international; 
     const first_page_international = context.bindings.rate.first_page_international; 
     const addtl_page_international = context.bindings.rate.addtl_page_international; 
     const express_international_flat_rate = context.bindings.rate.express_international_flat_rate; 

     var number_of_pages = req.query.number_of_pages; 
     var delivery_country = req.query.delivery_country; 
     var flat_cost = 0.0; 
     var per_page_cost = 0.0; 
     var cost = 0.0; 
     var tax = 0.0; 
     var discount = 0.0; 
     var first_page_domestic = context.bindings.rate.first_page_domestic; 
     var addtl_page_domestic = context.bindings.rate.addtl_page_domestic; 

     if (req.query.rate == 1) { 
      first_page_domestic = context.bindings.rate.first_page_domestic_discount_one; 
      addtl_page_domestic = context.bindings.rate.addtl_page_domestic_discount_one; 
     } 
     else if (req.query.rate == 2) { 
      first_page_domestic = context.bindings.rate.first_page_domestic_discount_two; 
      addtl_page_domestic = context.bindings.rate.addtl_page_domestic_discount_two; 
     } 

     if (delivery_country == "US") { 
      if (req.query.special_paper) { 
       flat_cost = first_page_special_domestic; 
       per_page_cost = addtl_page_special_domestic; 
      } 
      else { 
       flat_cost = first_page_domestic; 
       per_page_cost = addtl_page_domestic; 
      } 
      if (req.query.tracking) flat_cost += tracking; 
      if (req.query.certified) flat_cost += certified; 
      if (req.query.registered) flat_cost += registered; 
      if (req.query.express) flat_cost += express_domestic; 
      if (req.query.return_envelope) flat_cost += return_envelope; 
     } 
     else { 
      if (req.query.special_paper) { 
       flat_cost = first_page_special_international; 
       per_page_cost = addtl_page_special_international; 
      } 
      else { 
       flat_cost = first_page_international; 
       per_page_cost = addtl_page_international; 
      } 
      if (req.query.express) flat_cost += express_international_flat_rate; 
      if (req.query.return_envelope) flat_cost += return_envelope; 
     } 

     if (number_of_pages > 1) { 
      cost = ((number_of_pages - 1) * per_page_cost) + flat_cost; 
     } 
     else { 
      cost = flat_cost; 
     } 

     cost = cost.toFixed(2); 

     if (req.query.state_tax == "true" && delivery_country == "US") { 
      tax = 0.095; 
     } 

     context.res = { 
      status: 200, 
      body: { "cost": cost, 
        "tax": tax 
      } 
     }; 
    } 
    else { 
     context.res = { 
      status: 421, 
      body: "Unprocessable Entity" 
     }; 
    } 
    context.done(); 
}; 

錯誤消息指的是第一個const聲明,first_page_special_domestic。我的感覺是,我已經以某種方式錯誤地配置了它,在我的function.js中。任何幫助,將不勝感激!

+0

你有什麼更新? –

回答

1

基本上,您可以使用rate作爲函數參數來獲取這些值。

請如下更改代碼:

module.exports = function (context, req, rate) { 
    context.log('Processing mailing'); 

    if (req.query.number_of_pages && req.query.delivery_country) { 
     const first_page_special_domestic = rate.first_page_special_domestic; 
     //... 
    } else { 
     //... 
    } 
    context.done(); 
}; 
相關問題