我正在尝试使用Watson视觉识别api设置视觉识别应用程序。为此,我首先下载了watson-developer-cloud,然后将其放在我的index_html和api_request.js旁边的node_modules文件夹中。

这是我的api_request.js文件:

 var watson = require('./node_modules/watson-developer-cloud');

 var visual_recognition = watson.visual_recognition({
   username: '*********',
   password: '*********',
   version: 'v2-beta',
   version_date: '2015-12-02'
 });
 visual_recognition.listClassifiers({},
    function(err, response) {
     if (err){
        console.log(err);
  }
     else {
        console.log(JSON.stringify(response, null, 2));
  }
    }
 );


它直接来自视觉识别API文档。我在终端中运行了该文件,它提供了所需的输出,该输出是视觉识别分类器的列表。但是,由于它具有node.js函数,因此我决定使用browserify使其在浏览器中运行。我安装了browserify,并从api_request.js和api_request.js和index.html文件所在的目录中构建了bundle.js。

将index.html链接到bundle.js之后,我在浏览器中将其打开,并且node.js函数没有任何问题。

但是,如果watson-developer-cloud中的文件找不到watson-developer-cloud中的另一个文件,则会发生错误。具体来说index.js找不到v2-beta(我没有编辑watson-developer-cloud文件)。我感到奇怪的是,当我在终端中运行api_request.js时,所有的watson-developer-cloud文件都没有任何问题,但是一旦我使用browserify,bundle.js就会记录下index.js找不到v2-的错误Beta。

"build": "browserify api_request.js -o bundle.js"


^那是我用来构建bundle.js的脚本。我能想到的唯一可能导致此错误的是browserify。还有其他可能导致这种情况的原因吗?

最佳答案

不幸的是,大多数IBM Watson API不支持CORS,因此无法在浏览器中使用。由于这个事实,watson-developer-cloud npm模块在编写时并没有考虑到browserify,而是以编程方式从磁盘加载了一些文件。 Browserify无法处理-必须提前知道要从磁盘加载哪些文件。您可能可以通过在浏览器命令中添加--require node_modules/watson-developer-cloud/services/visual_recognition/v1.js来解决此问题,但这只会给您带来第一个问题:不支持CORS。

因此,在所有这些都不影响的情况下,当前推荐的解决方案是在服务器中创建一个端点,该端点将请求从浏览器转发到watson服务。我知道这是一个额外的步骤,但这是目前可用的最佳选择。 https://github.com/watson-developer-cloud/visual-recognition-nodejs显示了一个很好的例子。

Watson平台未来的更新可能会全面启用CORS,如果发生这种情况,我们将确保更新npm模块以与browserify配合使用。

09-30 13:19
查看更多