Javascript Can';t使用Ionic和Express.js从服务器端的客户端获取数据

Javascript Can';t使用Ionic和Express.js从服务器端的客户端获取数据,javascript,node.js,express,ionic-framework,Javascript,Node.js,Express,Ionic Framework,这个问题以前可能有人回答过,但我似乎找不到正确的答案。我正在做一个Ionic项目,我用Node.js和express.js创建了另一个项目来处理我所有的http请求。目前这两个都在本地主机上运行。当我试图将一些数据从客户端发送到服务器端时,我从请求中获得的数据在我使用console.log(req.body)时如下所示: {{“用户名”:hello@hello.com“}':”'} 我尝试了req.body[username]等等来获取数据,但是它只是没有定义 我处理http请求的控制器如下所示

这个问题以前可能有人回答过,但我似乎找不到正确的答案。我正在做一个Ionic项目,我用Node.js和express.js创建了另一个项目来处理我所有的http请求。目前这两个都在本地主机上运行。当我试图将一些数据从客户端发送到服务器端时,我从请求中获得的数据在我使用console.log(req.body)时如下所示:

{{“用户名”:hello@hello.com“}':”'}

我尝试了req.body[username]等等来获取数据,但是它只是没有定义

我处理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': '*'}
});
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);
    });
});
Html元素

<input type="text" ng-model="data.username" name="name">
包括Server.js bodyparser

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

对象具有键和值

{ key: value }
正文上的对象以错误的方式发送,因为您发送的对象的键为“{”username”:hello@hello.com“}”的值为“”

我建议您修复如何发布到nodejs/express服务器。但是你可以通过一些技巧来获得价值。像这样

 const body = {'{"username":"hello@hello.com"}': '' }

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

编辑:所以我在这里做的是获取对象的所有关键点。只有一个键“{”username”:hello@hello.com"}'. 因为那个键是一个字符串,所以我正在解析它以获得一个对象。现在我有了一个目标

  { username: 'hello@hello.com' }
最后我要注销用户名

正确的解决方案是修复如何将数据发送到express服务器

我不太明白你的控制器。你的ng模型是data.username,但是你要

var username = $scope.username
应该是哪一个

var username = $scope.data.username // (that's at least what you're binding to in your view)
此外,您还希望发送带有post的对象,而不仅仅是值

$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': '*'}
});

我不确定express解析器,但我不知道为什么要调用bodyparser两次。第一个就足够了。

您能告诉我们控制器中存储了什么用户名吗