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 =
   213   214   215   216   217   218   219   220   221   222   223