2017-04-21 44 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(); 
}; 
相关问题