首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Action英雄如何在没有定义输入的情况下接收参数?

Action英雄如何在没有定义输入的情况下接收参数?
EN

Stack Overflow用户
提问于 2017-01-19 05:03:24
回答 2查看 300关注 0票数 0

我正在使用ActionHero在node.js和Angular.js中。

我正在尝试使用ActionHero方法将图像发送到$http。但我不知道拍了多少张照片。因此,我不能在ActionHero中定义操作上的参数名。

下面是我的消息来源。

第一。图像在对象中,所以我将对象更改为每个参数。

代码语言:javascript
复制
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);
    });

  }

第二。使formDatasendUrlFile中类似于下面的源代码。然后发送到actionHero。

代码语言:javascript
复制
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;
      }
    });

第三。接收到ActionHero。但是参数没有定义,所以ActionHero无法接收。

代码语言:javascript
复制
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'
  } 

所以我有两个问题:

  1. 动作英雄如何在没有定义输入的情况下接收参数?
  2. 我可以通过Ajax将图像数据发送到ActionHero吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-01-20 05:19:12

我在reduceParams中改变了actionProcessor.js函数。

代码语言:javascript
复制
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];
        }
      }
    }
  }
};

我可以像下面这样定义输入。

代码语言:javascript
复制
'img_*' : {required: false}
票数 0
EN

Stack Overflow用户

发布于 2017-01-20 07:15:11

然后我制作了中间件

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41734124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档