Bonjour,

J'ai des informations sur l'utilisateur qui sont envoyées depuis angularJS ( collecter depuis un formulaire html) vers nodeJS.
Le probléme que j'ai pas bien récupérer ces données au sien de la fonction nodeJS.

Ce que je fais

-Formulaire html:

<form role="form" enctype="multipart/form-data" name="myForm">
<input type="text"  ng-model="UserName" required="required">
<input type="text"  ng-model="FirstName" required="required">
<input type="file"  ng-model="Image" required="required">
<button type="submit" ng-click="addUser()">save</button>
</form>
  • Code Angular.js:
$scope.addUser=function(){
      var user ={
            UserName: $scope.UserName,
           FirstName:$scope.FirstName
                  };
                console.log("info User: "+user.UserName);//Well recovered data

              $http.post(url+"/add",$scope.user,$scope.Image)
              .success(function(data){
                      $scope.ListUsers=data;
              }).error(function(err,data){
                  console.log("error " +err);
              }); 
           };
  • Code Node.js :
app.post("/add",function (req,res) {  
console.log("data of user: "+req.body); //undefined
 http.get(url+"/addInfoUsers",req.body,req.Image, function (repsHttp) {
 //error here
                         var body='';
                          repsHttp.on('data',function(d) {
                              body += d;
                          });
                          repsHttp.on('end',function() {
                              try {
                                  var user = JSON.parse(body);
                              } catch(e) {
                                  console.log('error ', +body);
                              }
                              res.json(user);
                          });
                      });
                  });

-API JAX-RS for l'ajout d'utilisateur:

@RequestMapping(value="/addInfoUsers",headers = "content-type=multipart/*")
    @Consumes("multipart/form-data")
    public Users AddUser( @FormDataParam("file") InputStream uploadedInputStream,
            @RequestParam(value="file") MultipartFile fileDetail, 
            HttpServletRequest request,
            @RequestBody(required=false) Users user){

            UM.AddDataUsers(uploadedInputStream,fileDetail,user);
                        }

Merci de m'aider à trouver,

4 réponses


workfel
Réponse acceptée

Hey,

Dans ta fonction addUser sur ton code angular tu n'envois pas la bonne variable dans ta requête POST.
Tu envois $scope.user au lieu de user.

$scope.addUser=function(){
      var user ={
                UserName: $scope.UserName,
               FirstName:$scope.FirstName
                  };
                console.log("info User: "+user.UserName);//Well recovered data

              $http.post(url+"/add",user)
              .success(function(data){
                      $scope.ListUsers=data;
              }).error(function(err,data){
                  console.log("error " +err);
              }); 
           };

Hello, je ne connais pas du tout Angularjs donc je ne pourrais pas voir si il y a un problème dans ton code utilisant Angularjs, ceci étant dit, il semblerait que ce soit plus un problème lié à ton utilisation de nodejs.

Pourquoi tu n'utilises pas un micro-framework tels que express ou restify pour te simplifier la vie quant à la communication HTTP ?
Si tu pouvais donner plus de code node ça serait cool car j'ai réellement du mal à comprendre ce que tu fais (car c'est totalement illogique)... Tu utilises la variable app (ce qui pourrait faire penser à expressjs) puis ensuite http (ce qui pourrait faire penser au module node) pour intérsepter les requêtes http *mind blown*.

Salut,

Pourquoi, côté NodeJS, fais-tu une requête HTTP vers une autre route ? C'est vraiment bizarre de faire comme ça.
En relisant ton code, j'ai comme l'impression que tu ne sais pas ce que tu fais. Commence donc par regarder la formation consacrée à NodeJS, cela te permettra déjà de comprendre les bases.

emile01
Auteur

Merci pour ta correction kalagan, le probléme est résolu :)