Page 186 - AngularJS权威教程
P. 186

166  第 16 章  XHR 实践




                         下面的配置会改变全局的Restangular对象。如果我们想将设置封装起来,针对单
                        个数据库进行配置,就需要创建一个服务,将自定义的Restangular对象封装起来。

                 首先设置API密钥,鉴于这个密钥在整个应用中都是不变的,可以将它设置成常量。

                 angular.module('myApp', ['restangular'])
                 .constant('apiKey', 'YOUR_API_KEY');
                 现在这个API密钥可以被注入到应用的任何部分当中。接下来在模块的config()代码块中进
             行设置。

                 为了使用MongoLab,需要将baseUrl设置成API的切入点:
                 //...
                 .config(function(RestangularProvider,apiKey) {
                     RestangularProvider
                     .setBaseUrl('https://api.mongolab.com/api/1/databases/YOURDB/collections');
                 });
                 接下来,任何发送给后端数据库的请求都需要设置API密钥。通过Restangular的setDefault
             RequestParams()方法可以方便地进行设置:
                 //...
                 .config(function(RestangularProvider,apiKey) {
                     //...
                     RestangularProvider
                     .setDefaultRequestParams({
                         apiKey: apiKey
                     });
                 });
                 接下来需要更新Restangular中的字段映射,将MongoDB的_id.$oid字段映射到Restangular
             的id字段上。通过setRestangularFields()函数可以方便地实现这个需求:

                 //...
                 .config(function(RestangularProvider,apiKey) {
                     //...
                     RestangularProvider.setRestangularFields({
                         id: '_id.$oid'
                     });
                 });
                 最后需要覆盖_id字段,这个字段是MongoDB在更新记录时设置的。Mongo不允许覆盖_id
             字段,所以我们通过Restangular来模拟这个过程。鉴于Restangular会调用路由来更新元素,我们
             不需要担心对象无法被覆盖。
                 .config(function(RestangularProvider,apiKey) {
                     //...
                     RestangularProvider.setRequestInterceptor(function(elem, operation, what) {
                         if (operation === 'put') {
                             elem._id = undefined;
                             return elem;
                         }
                         return elem;
                     });
                 });
   181   182   183   184   185   186   187   188   189   190   191