Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用用户名为用户查询mongoose_Angularjs_Node.js_Mongoose - Fatal编程技术网

Angularjs 如何使用用户名为用户查询mongoose

Angularjs 如何使用用户名为用户查询mongoose,angularjs,node.js,mongoose,Angularjs,Node.js,Mongoose,我的nodejs API应用程序中有此路由: router.post('/user', function(req, res, next){ if(!req.body.username){ return res.status(400).json({message: 'Geen username'}); } var user = {}; User.find({ 'username': req.body.username}, function(err, foundUser)

我的nodejs API应用程序中有此路由:

router.post('/user', function(req, res, next){
  if(!req.body.username){
    return res.status(400).json({message: 'Geen username'});
  }

  var user = {};

  User.find({ 'username': req.body.username}, function(err, foundUser){
    if(err)
      return next(err);

    if (foundUser) // check the value returned for undefined
    {
      user = foundUser;
    }
  });

  res.json(user);
});
然而,这只是返回{},我确信用户名在数据库中

这是我在angular应用程序中调用路线的方式:

$scope.user = function() {
        $http({
            method: 'POST',
            url: "http://groep6api.herokuapp.com/user",
            headers: {
             'Content-Type': 'application/x-www-form-urlencoded'
             //'authentication': 'bearer' + $window.localStorage.getItem('token')
             },
            data: {username: $window.localStorage.getItem('username')},
            transformRequest: function(obj) {
                var str = [];
                for(var p in obj)
                    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
            }
        }).success(function (result) {
            console.log(result);
        }).error(function(){

        });
    };

我对Angular和Nodejs还比较陌生,我尝试了User.find和User.findOne,但都不起作用。如何根据参数搜索mongoose中的对象?

在mongoose调用完成之前返回json,因此用户变量为空。试试这个:

router.post('/user', function(req, res, next){
    if(!req.body.username){
      return res.status(400).json({message: 'Geen username'});
    }

    var user = {};

    User.find({ 'username': req.body.username}, function(err, foundUser){
    if(err)
        return next(err);

    if (foundUser) // check the value returned for undefined
    {
      user = foundUser;
    }

    res.json(user);
  });

});

您需要放置
res.json()在您的
findOne()中


您正在使用passport吗?无需使用数据库将其保存在您的本地存储中…请尝试以下操作:
User.findOne({'username':req.body.username},
我很确定您的if语句有问题。您能删除if(foundUser)吗我很确定这就是问题所在您的
res.json
需要进入查询回调。否则您将在查询结果可用之前发送响应。
router.post('/user', function(req, res, next){ if(!req.body.username){ return res.status(400).json({message: 'Geen username'}); } var user = {}; User.findOne({ 'username': req.body.username}, function(err, foundUser){ if(err) return next(err); console.log(foundUser); 
// if this works everything's fine 
    if (foundUser) // check the value returned for undefined 
{ user = foundUser;  res.json(user); } }); 
     });