只调用成功处理程序 - AngularJS

时间:2015-08-25 23:27:01

标签: javascript angularjs node.js

以下是我的/ authenticate方法的一部分,该方法会找到具有给定usernamepassword的用户。

    User.findOne({
        username: req.body.username,
        password: req.body.password
    }, function(err, user) {
        if (err) {
            res.json({
                type: false,
                "status": "401",
                "data": "Incorrect email/password"
            });
        } else {
            if (user) {
                console.log("token");
                res.json(generateToken(user));
            } else {
                res.json({
                    type: false,
                    "status": "401",
                    "data": "Incorrect email/password"
                });
            }
        }
    });

当没有usernamepassword时,if(err)内的条件永远不会触发。

其次,当我从angular-js代码调用此方法时,无论success/error如何,只调用成功。

login: function (username, password) {
    return $http.post('http://localhost:8888/login', {
             username: username,
             password: password
    });
}

我的控制器调用代码:

AutheService.login(username, password).success(function(response) {
           console.log(response); // error message as well as success comes here
      }).error(function(data, status){
           console.log(data, status);
     })

1 个答案:

答案 0 :(得分:2)

您需要在服务器端回复实际的错误代码。我假设您正在使用expressJS,在查看了他们的文档之后,您可以像res.status(401).json(...)一样链接您的回复:

User.findOne({
    username: req.body.username,
    password: req.body.password
}, function(err, user) {
    if (err) {
        res.status(401).json({
            type: false,
            "status": "401",
            "data": "Incorrect email/password"
        });
    } else {
        if (user) {
            console.log("token");
            res.json(generateToken(user));
        } else {
            res.status(401).json({
                type: false,
                "status": "401",
                "data": "Incorrect email/password"
            });
        }
    }
});