简体   繁体   English

在未定义输入的情况下,Actionhero如何接收参数?

[英]How can Actionhero receive the parameter without inputs defined?

I'm using ActionHero in node.js and Angular.js. 我在node.js和Angular.js中使用ActionHero。

I am trying images send to ActionHero using $http method. 我正在尝试使用$ http方法将图像发送到ActionHero。 but I don't know How many images are made. 但我不知道要制作多少张图像。 so I can't define the parameter names on action in ActionHero. 因此我无法在ActionHero中定义动作的参数名称。

below is my source. 以下是我的消息来源。

First. 第一。 images are in object, so I change object to each parameter. 图像在对象中,因此我将对象更改为每个参数。

insert: function (param, next) {

    var url = settings.apiUrl + "/api/online/productAdd";
    var vdata = {
      img_objects     :param.img_objects
    };

    angular.forEach(param.img_objects, function (v, k) {
      vdata['img_file'+(k)] = v.files;
    });

    commonSVC.sendUrlFile("POST", url, vdata, function (state, data) {
      next(state, data);
    });

  }

Second. 第二。 make formData in sendUrlFile like source below. 使formDatasendUrlFile像下面源。 and then send to actionHero. 然后发送给actionHero。

var promise = $http({
      method: method,
      url: url,
      headers: {
        'Content-Type': undefined
      },
      data: params,
      transformRequest: function (data) {
        var formData = new FormData();
        angular.forEach(data, function (value, key) {
          if(angular.isObject(value)){
            if(value.lastModified > 0 && value.size > 0){
              formData.append(key, value);
            }else{
              formData.append(key, JSON.stringify(value));
            }
          }else{
            formData.append(key, value);
          }
        });
        return formData;
      }
    });

Third. 第三。 ActionHero is received. 收到ActionHero。 but parameter isn't defined so ActionHero can't receive. 但未定义参数,因此ActionHero无法接收。

exports.productAdd = {
  name: 'online/productAdd',
  inputs: {
    I don't know How Many Images are made? 1~10? or 1~100? 
  },
  authenticate: true,
  outputExample: {
    'result':'success'
  } 

So I have two Questions: 所以我有两个问题:

  1. How can actionhero receive the parameter without inputs defined? 在没有定义输入的情况下,actionhero如何接收参数?
  2. Can I object with Image Data send to ActionHero by Ajax? 我可以反对将图像数据通过Ajax发送到ActionHero吗?

Thank You. 谢谢。

I change reduceParams function in actionProcessor.js. 我在actionProcessor.js中更改reduceParams函数。

api.actionProcessor.prototype.reduceParams = function(){
  var self = this;

  var inputNames = [];
  if(self.actionTemplate.inputs){
    inputNames = Object.keys(self.actionTemplate.inputs);
  }

  // inputs * 확인 2017-01-20 Eddy
  var multi = [];
  var strArray;

  for(var v in inputNames){
    if(inputNames[v].indexOf("*") != -1){
      strArray = inputNames[v].split('*');
      multi.push(strArray[0]);
    }
  }

  var multiLength = multi.length;
  var flag;

  if(api.config.general.disableParamScrubbing !== true){
    for(var p in self.params){
      flag = true;

      if(multiLength > 0){
        for(var i=0; i<multiLength; i++){
          if(p.indexOf(multi[i]) != -1){
            flag = false;
          }
        }
      }

      if(flag){
        if(api.params.globalSafeParams.indexOf(p) < 0 && inputNames.indexOf(p) < 0){
          delete self.params[p];
        }
      }
    }
  }
};

i can define on inputs like below. 我可以定义如下的输入。

'img_*' : {required: false}

and Then I make middleware 然后我做中间件

var actionHeroMiddleware = {
  name: '-',
  global: true,
  priority: 1000,
  preProcessor: function(data, next) {
    api.actionProcessor.prototype.reduceParams = function(){
      var self = this;

      var inputNames = [];
      if(self.actionTemplate.inputs){
        inputNames = Object.keys(self.actionTemplate.inputs);
      }

      // inputs * 확인 2017-01-20 Eddy
      var multi = [];
      var strArray;

      for(var v in inputNames){
        if(inputNames[v].indexOf("*") != -1){
          strArray = inputNames[v].split('*');
          multi.push(strArray[0]);
        }
      }

      var multiLength = multi.length;
      var flag;

      if(api.config.general.disableParamScrubbing !== true){
        for(var p in self.params){
          flag = true;

          if(multiLength > 0){
            for(var i=0; i<multiLength; i++){
              if(p.indexOf(multi[i]) != -1){
                flag = false;
              }
            }
          }

          if(flag){
            if(api.params.globalSafeParams.indexOf(p) < 0 && inputNames.indexOf(p) < 0){
              delete self.params[p];
            }
          }
        }
      }
    };
    next();
  },
  stop: function(api, next) {
    next();
  }
};

api.actions.addMiddleware(actionHeroMiddleware);
next();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 不使用jQuery,我如何按类型获取输入? - Without using jQuery, how can I get inputs by type? 如何在不添加方法或类的情况下修剪所有输入中的空格? - How can trim spaces in all inputs without adding methods or classes? chrome说无法读取未定义的属性添加,如何在未定义的情况下将classlist.add添加到参数并在调用时定义它 - The chrome says can not read property add of undefined , how can I add classlist.add to parameter without been defined and define it when I call it 如何在没有路径参数值和查询参数的情况下获取我在 express 中间件中定义的确切 URL 路径? - How to get the exact URL path defined by me in express middleware without path parameter values and query parameters? 如何将数组输入作为参数传递给异步 function? - How to pass array inputs as parameter to async function? 如何使用Spring MVC接收数组作为参数? - How to use spring mvc to receive array as a parameter? 如何在onload事件中将$ _SESSION变量作为参数接收 - How to receive $_SESSION variable as a parameter in onload event 如何编辑动态添加的输入,而我的输入数据不会填充该数组中的其他输入? - How can I edit an input added dynamically, without my input data populating other inputs in that array? 如何在不重新加载页面的情况下向我的 url 添加参数? - How can I add a parameter to my url, without reload the page? 如何在不使用参数的情况下在javascript中传递变量? - How can I pass variable in javascript without using parameter?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM