모바일/Hybrid

JSON Proxy로 센차로 데이터 가져올때 주의점

늘근이 2015. 8. 2. 20:37

아 이거지같은 것때문에 장장 5시간을 쓰니까 너무 허무하다.


보통, 몽고디비와 연결되어있는 node.js에서 데이터를 가져오게 되는 구문에서 다음과 같이 설정하게 된다.


app.get('/list', function(request, response, error){
	Shop.find(function(error, shop) {
    response.setHeader('Content-Type', 'text/json');
    response.send(request.query["callback"] + '({"records":' +  JSON.stringify(shop) + '});');
  });
});//end list()


또한 Model 과 Store는 다음과 같이 쓰게 되는데,

Ext.define('attack.model.Shop', {
	extend : 'Ext.data.Model',
	config : {
		fields: ['_id', 'name', 'category','desc', 'time', 'lng', 'lat' ],
	},
});
Ext.define('attack.store.ShopStore', {
    extend: 'Ext.data.Store',
    requires: [
        'attack.model.Shop'
    ],
    config: {
        autoLoad: true,
        model: 'attack.model.Shop',
        storeId: 'ShopStore',
        proxy: {
            type: 'jsonp',
            url: 'http://localhost:3000/list',
            reader: {
                type: 'json',
                idProperty: '_id',
                rootProperty: 'records',
                useSimpleAccessors: true
            }
        }
    }
});


여기서 절대 바꾸지 말하야 할것이 있다.

저 rootProperty: 'records' 에서 바로 records이다. 같은 맥락으로 response.send에서도 records는 절대 다른걸로 바꾸면 안된다.

분명 이러한 식으로 개발자 직관에서 벗어나게 함으로써 엿먹이고 삽질하는게 의도된것은 아니더라도 데이터를 '' 으로 싸잡히는 records로 한정지은것은 문제가 있다. 이에대한 것은

http://docs.sencha.com/touch/2.4/2.4.2-apidocs/#!/api/Ext.data.writer.Json-cfg-rootProperty

위의 도큐먼트에서도 확연하게 찾아볼수 있다.


이제 다음 구문으로 보면 제대로 적당하게 작동하는것을 볼수있다.

var store = Ext.getStore('ShopStore');
 console.log(store);


 

 

 

 

참고로, rootproperty없이는 데이터를 한꺼번에 가져오기가 조금 불편하다.