2016-10-23 1 views
0

J'ai un problème et je ne connais pas le problème. S'il vous plaît, aidez-moi à trouver la solution.req.body est indéfini en express 4.13.1

De l'avis angulaire j'ai:

<form ng-submit="submit()"> 
<input ng-model="stickie_text" type="text" id="sticky_content" /> 
<button type="submit" id="add_sticky" value="add a new stickie!">new sticky</button> 

Dans le côté client (AngularJS) j'ai ce contrôleur:

dcuApp.controller('rankingController', ['$scope', '$http',function($scope, $http) {$scope.submit = function(){ 
// console.log("holaaaa"); 
console.log($scope.stickie_text); 
$http.get('/api/get-ranking',{"valor":$scope.stickie_text}).then(function(response) { 
     $scope.data = response.data; 
     console.log("RANKING: "+$scope.data); 
    }, 
    function(response) { 
     console.debug('Error:' + response); 
    }); 
}; 
}]); 

Dans le côté serveur (Express 4.13.1) J'ai:

var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var db = require('../model/db'); 
var model = require('../model/model'); 
var fs = require('fs'); 
var async = require('async'); 
var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); //used to manipulate POST 

router.use(bodyParser.urlencoded({ extended: true })) 
router.use(methodOverride(function(req, res){ 
     if (req.body && typeof req.body === 'object' && '_method' in req.body) { 
     // look in urlencoded POST bodies and delete it 
     var method = req.body._method 
     delete req.body._method 
     return method 
     } 
})); 

router.get('/api/get-ranking',function(req,res,next){ 
    console.log(req.body.valor); 
}); 

Le problème est que req.body.valor est UNDEFINED.

Je sais qu'il y a d'autres publications qui se rapportent à ce problème, mais je n'ai pas réussi à le réparer.

S'il vous plaît, je besoin d'aide pour obtenir sur le côté serveur, un autre req.body.valor undefined

merci !!! :)

+1

Vous faites une requête GET? – adeneo

+0

@adeneo est correct, vous devez convertir la requête en 'post' côté serveur ainsi que côté client ... sinon le paramètre sera ajouté à l'intérieur de l'URL comme paramètre de requête –

Répondre

0

Vous essayez d'exécuter une requête GET et envoyer data avec. Vous devez utiliser la demande POST pour réaliser ce que vous voulez. Vous ne pouvez pas envoyer de données dans une demande GET.

Vous devez changer votre méthode actuelle GET en POST.

Remplacer:

router.get('/api/get-ranking',function(req,res,next){ 
    console.log(req.body.valor); 
}); 

avec

router.post('/api/get-ranking',function(req,res,next){ 
    console.log(req.body.valor); 
}); 

aussi,

Remplacer:

$http.get('/api/get-ranking',{"valor":$scope.stickie_text}) 

avec:

$http.post('/api/get-ranking',{"valor":$scope.stickie_text}) 

Hope this helps.

+0

merci! ça a marché pour moi: D –