0

我已经使用 percolator js CRUDCollection 实现了一个小 API。它由 localhost:3000 上的节点提供服务。现在我希望能够将该 API 与在 localhost:8000 上运行的 django 应用程序一起使用,但它失败并出现错误Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin.

我尝试在 percolator 函数中设置标题,但它被忽略了:

list: function($, cb) {
    $.authenticate = checkAuth;
    $.res.setHeader('Access-Control-Allow-Origin', '*');
etc...

我研究了 JSONP 作为替代方案,但无法弄清楚将响应包装在回调函数中的钩子。

我该如何解决这个问题?

4

1 回答 1

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 来完成你的任务。

于 2013-02-15T15:30:40.377 回答