【发布时间】:2014-03-09 21:17:26
【问题描述】:
我第一次尝试在 Nodejs 上运行 REST 服务器并使用 $resource 从 AngularJS 访问它,但我遇到了问题......
我有一个控制器,它应该在登录时为已知用户加载一个 JSON 对象(购物车),或者如果用户是新用户,则创建一个空对象:
myApp.controller('MainCtrl', ['$scope', '$resource', function($scope, $resource) {
$scope.loggedIn = false;
var DataService = $resource('http://localhost:8080/cart/:userId');
$scope.login = function(user) {
DataService.query({userId: user}, function(data) {
// success
$scope.items = data;
$scope.loggedIn = true;
}, function() {
// error
$scope.items = [
{text: '', price: 0, quantity: 0}
];
$scope.loggedIn = true;
});
$scope.username = user;
};
}]);
服务端简单,使用restify:
var restify = require("restify");
var authenticatedUsers = [
{username:'shopper', korb:[
{text:'Many small thigns', price:1.50, quantity:27},
{text:'Nexus 5 red', price:399.0, quantity:1},
{text:'Something special', price:150.0, quantity:2}
]}
];
function respond(req, res, next) {
var name = req.params.name;
var cart;
authenticatedUsers.forEach(function(user) {
if (user.username == name) {
cart = user.korb;
}
})
res.send(cart);
}
var server = restify.createServer();
server.get('/cart/:name', respond);
server.head('/cart/:name', respond);
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
})
问题出在DataService.query({userId: user}, function(data) {。尽管对象从 Nodejs 服务器发送并在浏览器中接收到状态码 200,但成功回调永远不会被触发。每次我使用正确的用户名运行 login() 函数时,都会触发错误回调,而与 GET 的结果无关。我究竟做错了什么?代码相当简短,但显然我遗漏了一些东西......
提前致谢
【问题讨论】:
标签: javascript node.js angularjs restify