将一个空数据对象返回给我的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.
});
}
]);
答案 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 */ }
})
;