2016-10-23 2 views
0

У меня проблема, и я не знаю проблемы. Пожалуйста, помогите мне найти решение.req.body undefined in express 4.13.1

В угловом зрения я есть:

<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> 

В стороне клиента (AngularJS) у меня есть этот контроллер:

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

В стороне сервера (Express 4.13.1) i имеют:

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

Проблема заключается в том, что req.body.valor НЕ УКАЗАНА.

Я знаю, что есть другие публикации, которые относятся к этой проблеме, но не смогли ее исправить.

Пожалуйста, мне нужна помощь, чтобы получить на стороне сервера, другой req.body.valor неопределенных

спасибо !!! :)

+1

Вы делаете запрос GET? – adeneo

+0

@adeneo правильно, вы должны преобразовать запрос на 'post' на стороне сервера, а также на стороне клиента. В противном случае параметр будет добавлен внутри URL в качестве параметра запроса –

ответ

0

Вы пытаетесь сделать запрос GET и отправить data вместе с ним. Вы должны использовать запрос POST для достижения желаемого. Вы не можете отправить данные в запросе GET.

Вам необходимо изменить текущий метод GET на номер POST.

Заменить:

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

с

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

также,

Заменить:

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

с:

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

Надеется, что это помогает.

+0

спасибо! это сработало для меня: D –