2017-01-19 11 views
0

私はnode.jsとAngular.jsでActionHeroを使用しています。Actionheroは入力を定義せずにパラメータを受け取る方法はありますか?

$ httpメソッドを使用してActionHeroに画像を送信しようとしています。 しかし、私は何枚の画像が作られたのかわかりません。 私はActionHeroのアクションでパラメータ名を定義することはできません。

以下は私の出典です。

最初。画像はオブジェクトにあるので、オブジェクトを各パラメータに変更します。

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); 
    }); 

    } 

第2。 formDatasendUrlFileに入れてください。 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; 
     } 
    }); 

第3です。アクションヒーローを受け取った。 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' 
    } 

だから、私は2つの質問があります:定義された入力せずにパラメータを受け取るactionheroするにはどうすればよい

  1. を?
  2. AjaxでActionHeroに送信する画像データでは対処できますか?

ありがとうございます。

答えて

0

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]; 
     } 
     } 
    } 
    } 
}; 

私は以下のような入力で定義できます。

'img_*' : {required: false} 
0

とそれから私は作るミドルウェア

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(); 
関連する問題