Sencha Rest代理无法访问Localhost:3000(Redmine)上可用的数据

时间:2015-03-24 17:03:27

标签: json rest extjs proxy redmine

这是我的模特

 Ext.define('ThemeApp.model.peopleModel', {
    extend: 'Ext.data.Model',

    fields: [
        { name: 'id' },

        { name: 'subject' },

        { name: 'description'}
    ],

    proxy: {
        type: 'rest',
        format: 'json',
        limitParam:"",
        filterParam: "",
        startParam:'',
        pageParam:'',
        url:'http://localhost:3000/issues/1',
        /*
        api: {
    read  : 'http://localhost:3000/issues'

},*/

        headers: {'Content-Type': "application/json" },
        //url : 'http://api.soundcloud.com/tracks?q=allah%20dita%20rehman%20khan&client_id=0b19b8dc2526b43eae19f03b2eab6798&format=json&_status_code_map[302]=200',

        reader: {
        type: 'json',
        rootProperty:'issues'
        },
        writer: {
            type: 'json'
        }

    }});

这是我的商店:

Ext.define('ThemeApp.store.peopleStore', {
extend: 'Ext.data.Store',

    model: 'ThemeApp.model.peopleModel',
    storeId: 'peopleStore',
    pageSize: 500,

    autoLoad: true });

我要做的就是使用Rest代理填充此网格,并测试rest代理的GET和POST方法。我能够使用这个应用程序准备soundcloud api,但是当我尝试阅读Redmine问题时(localhost:3000 / issues.xml) 我收到了这个错误:

Chrome Console Error

http://localhost:3000/issues.json仅使用较少的数据看起来像http://www.redmine.org/issues.json。还有Localhost:300 / issue.json做exsist!

任何想法?

2 个答案:

答案 0 :(得分:1)

您正在尝试针对Redmine API执行CORS次请求。不幸的是,Redmine目前不支持CORS,因此如果没有进一步的基础设施更改(如果做错了可能会危及安全性),这是不可能的。

有一些插件将RedS响应中的CORS头添加,但是从我所看到的,他们还没有完全确保安全的系统。

鉴于这些限制,只有当您的ExtJS应用程序从与Redmine相同的主机和端口提供服务时,您对Redmine的请求才有效,以便它在相同的源中运行,因此无需任何显式的CORS支持即可运行。您可以在Redmine和ExtJS应用程序的静态文件之前使用代理服务器(例如nginx)启用此功能,以确保相同的来源。

答案 1 :(得分:0)

http://localhost:3000/issues.json

存在,但

http://localhost:3000/issues/1.json

不存在。

为了让rest api工作,你需要使用url重写。

如果你有一个扁平的.json文件,你不应该使用rest代理而是使用json代理,你就不会遇到这个问题。