NPM模块中的JSONP(节点/浏览器)跨域

时间:2016-03-11 10:08:05

标签: javascript node.js npm cross-domain jsonp

我写的NPM模块应该在Node和浏览器上工作(通过Browserify打包)。

其部分功能是执行JSONP调用,并返回已解析的数据。 我无法让它发挥作用。 我尝试使用jsonp-clientjsonp npm模块,但收效甚微。

node-jsonphttps://www.npmjs.com/package/node-jsonp

promise = new promise (resolve, reject) ->

        nodejsonp url, (json) ->
            resolve json

上面的代码片段在Node中工作正常,但由于Same Origin跨域安全策略,浏览器失败。

jsonp-client https://www.npmjs.com/package/jsonp-client

promise = new promise (resolve, reject) ->
        jsonpclient url, (err, data) ->
            if (err)
                console.log err
            resolve data

在这种情况下,我收到错误"错误:无法在URL(...)"上找到回调,但我无法从文档中了解如何正确实现该功能。

帮助不大? :)

编辑:提到的第一个包实际上是" node-jsonp"而不是" jsonp"

1 个答案:

答案 0 :(得分:0)

看起来您使用的API不正确。 first one包的Api为:jsonp(url, opts, fn),因此您应该重写代码并添加选项:

promise = new promise (resolve, reject) ->
    jsonp url, {}, (json) ->
        resolve json

Second one在文档中有这个:

  

在浏览器上,您必须在URL上提供有效的回调。

URL需要manual adding of callback参数。您应该检查how jsonp works:它在调用此回调函数时添加了callback GET参数和响应。即

  • 您是sendind请求:<api url>?callback=cb;
  • 服务器呈现javascript响应,该响应将eval - 在您的应用中cb({json});
  • 为了处理此响应,您应该拥有全局函数cb,它将接收json作为参数。