Express-throttle如何根据函数的参数设置api调用的成本

时间:2019-06-18 19:38:02

标签: javascript node.js api express throttling

我正在使用Express-throttle限制每天每个IP地址的api调用量。我想根据api请求中的值在“选项”数组中设置“费用”参数。 (请参见代码中的注释“ QUESTION”。)

因此,请求中的参数确定了针对每日最大计数器的api调用费用(通过节流阀可以解决)。问题是,节流阀(选项)作为app.post ..的参数被调用,所以设置它为时已晚?

我该怎么做?我在考虑回调,但不确定如何实现。我试图连续进行2次api调用,但这可能会导致计时问题。请指教。谢谢。

代码:

var throttle = require("express-throttle");
var express = require("express");
var app = express();

var options = {
  "burst": 100,
  "period": "1d",

  // "cost" : 3; <<< This needs to be set to a value from the request.

  "on_throttled": function(req, res, next, bucket) {
      // Set responsemessage when maximum has been reached.
    res.status(503).send("Come back tomorrow.");
  }
};

app.get("/throttletest", throttle(options), (req, res, next) => {

    // QUESTION : I need to set the "cost" parameter to res.body.userBurst.

    res.send("Ok Throttletest");

});

1 个答案:

答案 0 :(得分:0)

我现在正在尝试像这样设置它:

var options = {
  "burst": 100,
  "period": 1d,
  "cost": function(req){
    var amount = req.body.amount;
    return amount;
  },

必须先进行测试。