我使用percolator js CRUDCollection实现了一个小API。它由localhost:3000上的节点提供服务。
现在我希望能够在我的django应用程序上运行localhost:8000,但它失败并显示错误Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin.
我尝试在过滤器功能中设置标头,但它被忽略了:
list: function($, cb) {
$.authenticate = checkAuth;
$.res.setHeader('Access-Control-Allow-Origin', '*');
etc...
我将JSONP视为一种替代方案,但无法弄清楚在回调函数中包装响应的钩子。
我该如何解决这个问题?
答案 0 :(得分:0)
这是我第一次听说过Percolator.js。这是一个有趣的图书馆。
无论如何,设置$.res.setHeader('Access-Control-Allow-Origin', '*');
对我有用。您是否检查过此标题是否实际存在?
现在关于JSONP。您可以使用collectionGET
代替list
:
collectionGET:function($) {
var data = ...; // some code here
var data_str = $.json(data).toString( ),
url = require("url").parse($.req.url, true),
jsonp = url.query.callback && url.query.callback.length && url.query.callback;
if (jsonp) {
$.res.setHeader( "content-type", "application/javascript" );
$.res.write( jsonp + "(" );
} else {
$.res.setHeader( "content-type", "application/json" );
}
$.res.write( data_str );
if (jsonp) {
$.res.write( ");" );
}
$.res.end();
}
虽然它有点低级(似乎Percolator.js在响应中添加了一些额外的东西)。也许你需要其他东西,然后Percolator.js为你的任务。