2017-08-31 254 views
0

此问题可能之前已被回复,但似乎无法找到正确的答案。我正在创建一个Ionic项目,我在其中创建了另一个使用Node.js和express.js处理所有http请求的项目。目前两者都在本地主机上运行。当我试图从客户端发送一些数据到服务器端时,我从请求中获得的数据看起来像这样当我console.log(req.body):无法从服务器端使用Ionic和Express.js从客户端获取数据

{ '{"username":"[email protected]"}': '' }

我试了两个req.body [用户名]等等来获取数据,但它只是得到了未定义。

我来处理HTTP请求的控制器是这样的:

$scope.submit = function(){ 
    var username = $scope.username; 
    console.log($scope.data.username); 
    $http({ 
    method: 'POST', 
    url: 'http://localhost:8000/api/users', 
    data: username, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin': '*'} 
}); 

HTML元素

<input type="text" ng-model="data.username" name="name"> 

服务器端API看起来是这样的:

router.post('/users', function (req, res) { 
    var username = req.body; 

    var newUser = new User({ 
     username: username 
    }) 

    newUser.save(function (err) { 
     if (err) { 
      return res.send(500, err); 
     } 
     return res.json(200, newUser); 
    }); 
}); 

Server.js bodyparser包括

app.use(bodyParser.json()); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(bodyParser.urlencoded({ extended: true })); 
+0

你能告诉我们你的控制器中存储了什么用户名 – turmuka

回答

0

对象具有键和值

{ key: value } 

身体上的对象是一些错误的方式,因为你发送与他们键对象“{‘用户名’beeing发送:“你好你好@。 com“}”,其值为''。

我会建议您修复如何发布到您的nodejs/express服务器。但是你可以通过一些黑客获得价值。喜欢这个。

const body = {'{"username":"[email protected]"}': '' } 

const keys = Object.keys(body); 
const parsed = JSON.parse(keys[0]); 
console.log(parsed.username); 

https://jsfiddle.net/wejh0fsk/2/

编辑:所以我在做什么这里获取对象的所有密钥。只有一个关键'{“用户名”:“[email protected]”}'。由于该键是一个字符串,我解析它来获得一个对象。现在我有一个对象

{ username: '[email protected]' } 

最后我注销了用户名。

正确的解决方案将解决您将数据发送到快速服务器的方式。

我不太了解你的控制器。你的NG-模型data.username但后来你把

var username = $scope.username 

var username = $scope.data.username // (that's at least what you're binding to in your view) 

而且要发送与职位的对象,而不仅仅是值

$scope.submit = function(){ 
    var username = $scope.username; 
    console.log($scope.data.username); 
    $http({ 
    method: 'POST', 
    url: 'http://localhost:8000/api/users', 
    data: { username: username }, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin': '*'} 
}); 

我不确定表达解析器,但我不知道你为什么要调用bodyparser两次。第一个应该就够了。

相关问题