Angular + Express表示空数据库结果集的标准方法是什么?

时间:2014-01-03 19:09:57

标签: node.js angularjs express

将一个空数据对象返回给我的Angular控制器并在那里查询它以正确的方式指示“没有找到用户”如下所示?似乎Mongoose或我自己的API应该至少返回{},然后我可以查询具体的数据,如data.username。

当然,我可以做到这一点,但标准是什么?

(Express code)
-------------------------------------------------------------------------------------
app.get('/api/memberconfirm/:code', function (req, res) {

    return db.userModel.findOne({'confirmcode': req.params.code}, function (err, data) {
         if (!err) {
              return res.send(data);
         }
         else {
              console.log("error");
              return something...
         }
    });
});


(Angular code)
-------------------------------------------------------------------------------------------
controllerModule.controller('MemberConfirm', ['$scope', '$http', '$routeParams', '$location',

      function MemberConfirm($scope, $http, $routeParams, $location) {
            var url = '/api/memberconfirm/' + $routeParams.param1;

            $http.get(url)
                 .success(function(data, status, headers, config) {

                        /*
                             null means no user found? 
                        */
                        if(data) {
                             $location.path("/login");
                        }
                        else {
                             $location.path("/memberconfirmfailed");
                        }
                 })
                 .error(function(data, status, headers, config) {
                        alert("not ok");
                        // called asynchronously if an error occurs
                        // or server returns response with an error status.
                 });
      }
]);

1 个答案:

答案 0 :(得分:1)

REST使用HTTP响应代码,因此404表示未找到。另请注意,如果找不到任何内容,Mongoose将返回null。它仅返回err的实际错误(如数据库错误)。

对于服务器端代码:

return db.userModel.findOne({...}, function(err, data) {
    if (err) { /* handle the error */ }
    else {
        if (data) { return res.send(data); }
        else { return res.send(404); }
    }        
});

对于客户端代码:

$http.get(url)
    .success(function(data, status, headers, config) {
      /* found: do stuff */
    })
    .error(function(data, status, headers, config) {
      if (status === 404) { /* not found */ }
      else { /* some other error to deal with */ }
    })
;