在Angular中传回给callback的数据是未定义的

我在Node.js中有这个端点:

usersRoute.get('/get', function(req, res) { //If no date was passed in - just use todays date var date = req.query.date || dateFormat(new Date(), 'yyyy-mm-dd'), search = req.query.search; users.getAllUsers(date, search) .then(function(results) { res.json(results); }, function(err) { res.status(500).json({ success: false, message: 'Server error.', data: [] }); }); }); 

出于testing目的,我错误地命名了我的SQL表,所以它会去function(err){}

我的服务function看起来像这样

 function getUsers(date, search) { return $http.get('/api/users/get', { params: { date: UtilsService.formatDate(date), search: search } }) .then(getData) .catch(handleErr); function getData(response) { console.log(response); return response.data; } function handleErr(err) { console.log(err); LoggerService.error('Could not retrieve users.', err ,'Ooops'); return $q.reject(err); } } 

thencatch中的console.log都返回undefined

如果有人能向我解释为什么,我将不胜感激。

编辑用于分类; 这里有更多的后端代码:

Users.js

 var sql = require('seriate'); var when = require('when'); var getAllUsers = function(date, search) { return sql.execute({ query: sql.fromFile('../sql/users/getAllUsers.sql'), params: { date: { type: sql.DATE, val: date }, search: { type: sql.VARCHAR, val: search } } }); } module.exports = { getAllUsers: getAllUsers }; 

UsersApi.js

 var express = require('express'); var dateFormat = require('dateformat'); var users = require('../models/users'); var validation = require('../middleware/validation'); var usersRoute = express.Router(); //Checks for a valid token validation.isLoggedIn(usersRoute); usersRoute.get('/get', function(req, res) { //If no date was passed in - just use todays date var date = req.query.date || dateFormat(new Date(), 'yyyy-mm-dd'), search = req.query.search; users.getAllUsers(date, search) .then(function(results) { res.json(results); }, function(err) { res.status(500).json({ success: false, message: 'Server error.', data: [] }); }); }); module.exports = usersRoute; 

在我的服务中, then部分以及catch被访问,并且两个对象( responseerr )都是undefined

你可以分享全面的服务吗? 我用你的代码创build了一个基于你提供的示例调用我在OpenShift上托pipe的nodejs服务的plunker我创build了一个模拟你的函数(err)的方法:

 self.routes['/get'] = function(req, res) { res.status(500).json({ success: false, message: 'Server error.', data: [] }); }; 

这款应用程序是:

 var app = angular.module('plunker', []); app.service('UserService', function($http, $q) { this.getUsers = function(date, search) { return $http.get('https://nodejs-starters.rhcloud.com/get', { params: { date: date, search: search } }) .then(getData) .catch(handleErr); } function getData(response) { console.log('status: ' + reponse.status + ' - ' + response.message); return response.data; } function handleErr(err) { console.log(JSON.stringify(err)); console.log('status: ' + err.status + ' Err= ' + err.data.message); console.log('Could not retrieve users.', err.data.message, 'Ooops'); return $q.reject(err); } }); app.controller('MainCtrl', function($scope, $http, $q, UserService) { var vm = $scope; vm.name = 'World'; UserService.getUsers(new Date(), '*'); }); 

并且,控制台显示以下结果:

 app.js:21 {"data":{"success":false,"message":"Server error.","data":[]},"status":500,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"params":{"date":"2016-06-02T18:33:50.633Z","search":"*"},"url":"https://nodejs-starters.rhcloud.com/get","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"Internal Server Error"} app.js:22 status: 500 Err= Server error. app.js:23 Could not retrieve users. Server error. Ooops 

所以handleErr被调用,并且定义了err。 'err.data.success'是错误的,'err.data.message'是'服务器错误'。 就像你在nodejs上写的一样。

在plunker的例子中,你能replace我的urlhttps://nodejs-starters.rhcloud.com/get与你的,看看你是否得到相同的结果或不同的结果?