Page 218 - AngularJS权威教程
P. 218
198 第 18 章 服务器通信
我们点击到最终的review屏幕后,点击create,我们将会得到一个全新的Dynamo表,用户会
被存储在那里。
当我们在控制台的时候,需要创建连接表。这个表把用户和用户上传的东西关联起来。
我们必须返回,再次找到Create Table按钮,创建一个叫做UsersItems的表,其主键类型为Hash
and Range。对于这个表来说,Hash Attribute Name也是User email,Range Attribute Name则是ItemId。
用这种方式建立表,能让我们基于email查询所有创建了上传记录的用户。
接下来的一个屏幕上剩下的选项是可选的,可以点击过掉。
此时,我们就有了两个可用的dynamo表。
回到UserService,我们首先查询这个表,看看用户是不是已经存储在数据库中了;如果没
有,就在我们的Dynamo数据库中创建一条记录。
var service = {
_user: null,
UsersTable: "Users",
UserItemsTable: "UsersItems",
// ...
currentUser: function() {
var d = $q.defer();
if (service._user) {
d.resolve(service._user);
} else {
// 加载了证书之后
AWSService.credentials().then(function() {
gapi.client.oauth2.userinfo.get()
.execute(function(e) {
var email = e.email;
// 为UsersTable
// 为UsersTable获取dynamo实例
AWSService.dynamo({
params: {TableName: service.UsersTable}
})
.then(function(table) {
// 根据email找到用户
table.getItem({
Key: {'User email': {S: email}}
}, function(err, data) {
if (Object.keys(data).length == 0) {
// 用户之前不存在
// 所以创建一条记录
var itemParams = {
Item: {
'User email': {S: email},
data: { S: JSON.stringify(e) }
}
};
table.putItem(itemParams,
function(err, data) {
service._user = e;
d.resolve(e);
});
} else {
// 用户已经存在
service._user =