req.body 在 express 4.13.1 中未定义

req.body is undefined in express 4.13.1

我有问题,但我不知道是什么问题。请帮我找到解决方案。

在 Angular 视图中我有:

<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)我有:

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

不同

谢谢!!! :)

您正在尝试执行 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})

希望这对您有所帮助。