使用Angular访问Express的响应数据
Accessing response data from Express using Angular
我想使用Angular从前端访问经过身份验证的用户的数据。
这是来自Node.js.上Express的响应
routes/dashboard.js
exports.build = function (req, res) {
res.render('dashboard', {
uid: req.user._id
});
};
目前,我通过ng-init
指令获取uid
。
views/dashboard.jade
doctype html
html
head
title= title
link(href='//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css', rel='stylesheet')
link(rel='stylesheet', href='/stylesheets/style.css')
block styles
body(ng-app='App', ng-controller='MainCntrl', ng-init='setUId(#{JSON.stringify(uid)})')
// some content
script(src='//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js')
script(src='//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js')
script(src='//cdnjs.cloudflare.com/ajax/libs/q.js/1.0.1/q.js')
script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js')
script(src='/javascripts/ng-app.js')
但是,我想避免这样做。
public/javascripts/ng-app.js
var app = angular.module('App', []);
app.factory('User', function () {
return {
// Promise for retrieving JSON User data
getProperties : function (id) {
var deferred = Q.defer();
$.getJSON('/api/user/' + id
, function (data) {
deferred.resolve(data);
}).fail(function () {
deferred.reject(true);
});
return deferred.promise;
}
};
});
app.controller('MainCntrl', ['$scope', '$http', 'User', function ($scope, $http, User) {
$scope.uid, $scope.user;
$scope.setUId = function (id) {
$scope.uid = id;
};
$scope.initUser = function () {
User.getProperties($scope.uid).then(function (user) {
$scope.$apply(function () {
$scope.user = user;
});
}, function (err) {
console.log(err);
});
};
}]);
我想将这个uid
数据传递给Angular,而不必使用ng-init
指令。有没有一种方法可以访问响应数据,大致如下:
console.log(res.body.uid);
从响应中检索uid
参数将消除对ng-init
指令的需要。我该如何取回它?
一个更简单、也许更优雅的解决方案是在URL中包含用户ID,并映射一条接受id
的路由。
然后你的控制器可以看起来更像这个
app.controller('MainCntrl', ['$scope', '$http', 'User','$stateParams', function ($scope, $http, User, $stateParams) {
// NOTE: I do not know which route engine you're using, though you would inject
// its parameters provider in here, to get access to the url parameter (userId) of the route
// so for this example, i have assumed ng-router hence the injection of $stateParams
// the getProperties() method here is assuming ng-routet
User.getProperties($stateParams.id).then(function (user) {
$scope.user = user;
}, function (err) {
console.log(err);
});
}]);
相关文章:
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 访问令牌和响应数据
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 如何在UI自动化中捕获响应数据
- 基于类的单击事件在10行之后不响应-数据表
- 从 HTML 页面中的第三方响应数据中获取单个值
- 如何从xhrpost函数中检索响应数据并将该对象存储在dojo/store中
- 可以'无法使用Oauth2/BaseCamp API获取响应数据
- jQuery$.ajax方法.成功:使用响应数据的函数
- $('body').html()从来自Firefox中$jQuery.post的响应数据中给出了空白内容
- 如何在我的高图表中传递 Ajax 响应数据
- 将 Ajax 响应数据加载到挖空数组中
- JavaScript/angular - 无法获取确切的返回响应数据
- 如何使jQuery JSON请求并使用响应数据来更改html元素值
- 将数据绑定到 kendo 下拉列表时,如何将 ajax 响应数据获取到变量
- Dojo 筛选选择 - 完整的 JSON 响应数据不可见
- 调用特定函数时无法加载响应数据
- html 响应数据 ID 不能在 Facebook API 调用中用作字符串
- 访问Ajax响应数据
- Angular$http-在接收响应数据时对其进行处理