Node.js サーバーに同期する Sencha-Touch-2 アプリを作成しようとしています。以下のコード。サーバーは同じ IP の別のポートを使用するため、これはクロスドメインです。 (サーバーは Mongoose を使用して MongoDB バックエンドと通信します (表示されていません))
示されているように JSONP プロキシを使用すると、サーバーからデータを読み取ることができますが、書き込み時に壊れます: "JSONP プロキシはデータの読み取りにのみ使用できます"。JSONP Proxy ライター設定はクエリを書き込むためのものであり、同期 (保存) の書き込みには使用されないと思います。
Senchaフォーラムではクロスドメインについて議論されて いますが、 Ajaxプロキシはクロスドメインに対応できないとSencha のドキュメントに記載されています: http://www.sencha.com/forum/showthread.php?17691-Cross-domain-Ext .Ajax-Ext.data.Connection
Ext.Ajax/Ext.data.Connection
(クロスドメイン) JSON 投稿を行ういくつかの方法を見つけました (例: Sencha Touch を使用したモバイル アプリケーション - JSON 要求が構文エラーを生成する ) が、ストアを同期するプロキシのライターとしてこれを統合する方法がわかりません。 Sencha Touch: 作成/更新機能の ScriptTagProxy url は ポインタを提供しているようですが、これは ajax であり、明らかにクロスドメインには適していません。
このフォーラムや他の場所を数日間読んでいますが、行き詰まっているようです. どんな助けでも大歓迎です。
Node.js と resify サーバー
var server = restify.createServer({
name: 'Server',
key: fs.readFileSync(root+'/'+'privatekey.pem'),
certificate: fs.readFileSync(root+'/'+'certificate.pem')
});
server.use(restify.bodyParser());
server.use(restify.queryParser());
function getMessages(req, res, next) {
Model.find(function (err,data) {
res.setHeader('Content-Type', 'text/javascript;charset=UTF-8');
res.send(req.query["callback"] + '({"records":' + JSON.stringify(data) + '});');
});
}
function postMessage(req, res, next) {//not yet tested
var obj = new Model();
obj.name = req.params.name;
obj.description = req.params.description;
obj.date = new Date();
obj.save(function (err) {
if (err) throw err;
console.log('Saved.');
res.send('Saved.');
});
}
server.post(/^\/atapp/, postMessage);
server.get(/^\/atapp/, getMessages);
server.listen(port, ipaddr, function() {
console.log('%s: secure Node server started on %s:%d ...', Date(Date.now()), ipaddr, port);
});
煎茶タッチ2
モデル
Ext.define('ATApp.model.User', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'name', type: 'string' },
{ name: 'description', type: 'string' },
{ name: 'date', type: 'date' },
{ name: '_id' }
...
店
Ext.define('ATApp.store.Data', {
extend: 'Ext.data.Store',
requires: [
'ATApp.model.User',
'Ext.data.proxy.JsonP'
],
config: {
autoLoad: true,
model: 'ATApp.model.User',
storeId: 'Data',
proxy: {
type: 'jsonp',
model: 'ATApp.model.User',
url: 'https://192.168.2.45:13017/atapp',
reader: {
type: 'json',
idProperty: '_id',
rootProperty: 'records',
useSimpleAccessors: true
},
writer: {
type: 'json',
allowSingle: false,
encode: true,
idProperty: '_id',
rootProperty: 'records'
...
コントローラ
onNewDataRecord: function (view) {
console.log('newDataRecord');
var now = new Date();
var record = Ext.create('ATApp.model.User', {
date: now,
name: '..',
description: '..'
});
var store = Ext.data.StoreManager.lookup('Data')
record.setProxy(store.getProxy());
store.add(record);
this.activateEditor(record);
},
...