在req.params节点中传递函数名称

时间:2014-10-11 19:02:08

标签: javascript node.js express

我有一个名为helpers.js的文件,其中包含以下内容

var helpers = {
  add: function(a,b){
    return a+b;
  },
  sub: function(a,b){
    return a-b;
  },
  mult: function(a,b){
    return a*b;
  },
  div: function(a,b){
    return a/b;
  },
  math: function(a,b,callback){
    return callback(a,b);
  }
};

module.exports = helpers;

在我的app.js中,我包括

var express = require("express"),
app = express(),
ejs = require("ejs"),
helpers = require("./helpers");

我正在尝试让用户在这里使用此代码作为参数传递函数名称:

app.get('/number/:num1/:num2/:operation', function(req,res){

  var a = parseInt(req.params.num1);
  var b = parseInt(req.params.num2);
  var operation = req.params.operation;
  var result = helpers.operation(a,b);


  res.render('math', {result: result});
});

由于变量操作是一个字符串,我收到错误Object#没有方法'operation'。有没有办法将此参数转换为函数?或者有更好的方法来尝试这样做吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用helpers[operation]访问该功能,只需确保它首先是有效的功能名称,否则您将获得TypeError例外。

var result = helpers[operation](a, b);