异步检查是否已使用AngularJS收集电子邮件

时间:2014-11-03 00:05:32

标签: angularjs node.js email express mongoose

我有以下电子邮件字段,用于获取电子邮件的用户输入。输入电子邮件并从字段中删除焦点ng-blur会触发检查用户输入的电子邮件是否已被执行的功能:

<input type="email" class="form-control" placeholder=""  ng-model="email" name="email" required ng-blur="isFound(email)">

为了显示错误,我得到了以下范围:

<span class="help-block error" ng-show="blurred && isTaken">Email is taken already</span>

这是函数isFound(email)

  $scope.isFound = function(email) {
      service.isEmailTaken(email).then(function(data) {
        console.log(data); //this shows either null or the returned data
        $scope.blurred = true;
        if(data == null) {
            $scope.isTaken = false;
        } else {
            $scope.isTaken = true;
        }
      });
  }

现在,当我尝试使用已发送的电子邮件时,它会正确显示消息。但在此之后,即使我输入未被拍摄的电子邮件,它仍会显示与Email is taken already相同的消息。

有人可以帮助我理解它为什么会发生以及如何解决它?

编辑 - 在下面添加AngularJS和NodeJS / ExpressJS / Mongoose代码:

AngularJS

factory.isEmailTaken = function(email) {
  return $http({url: "/api/queries/email/" + email, method: "GET"}).then(function(resp) {
      return resp.data;
  });
};

ExpressJS /的NodeJS /猫鼬

app.get('/api/queries/email/:email', function (req, res) {
    Query.findOne({email: req.params.email}, function (err, query) {
        if (err)
            res.send(err);
        res.json(query);
    });
});

1 个答案:

答案 0 :(得分:0)

如果未收到电子邮件,则data的值为nulltypeof dataString。 它之前没有工作的原因是因为if(data == null)总是变成false

if(data == 'null')让事情正常运作。