在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); } }
then
和catch
中的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
被访问,并且两个对象( response
和err
)都是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与你的,看看你是否得到相同的结果或不同的结果?
- 我需要创build一个简单的数据库用于Angular / Node演示。 什么是阻止添加这样的数据库到我的演示最小的path?
- 将多个AngularJS Post请求发送到Express服务器? 服务器崩溃的第二个post请求
- 只有成功处理程序被称为 – AngularJS
- Visual Studio 2015不识别Ionic和angularjs参数
- 不知道如何使用meanjs限制路线
- Angular / Express:redirect到login后访问的最后一页
- 如何使用Express和oAuth2让用户在Angular的多个设备上login?
- 如何在angularjs的ui.router的模板url中传递Nodejs的jade页面
- $ location.path不使用Angularjsbutton点击加载html文件