如何从表存储绑定中正确读取数据



我有一个节点函数,该函数从内部API中接收到请求,进行一些属性分配,然后吐出JSON响应。最初,我用一堆硬编码常数设置了它,但是我们决定将这些值移至储物桌上,这样我们就不必更改函数本身中的值将来的价格。我关注文档创建储物表,填充它并配置了我的功能以绑定到它。据我所知,我正在正确地称其为" TypeError:无法读取属性X"。这是我的函数。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();
};

错误消息是指第一个声明的first_page_special_domestic。我的感觉是,我在函数js中以某种方式将其配置为错误。任何帮助将不胜感激!

基本上,您可以将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();
}; 

最新更新