2

我正在尝试使用沃森视觉识别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来允许它在浏览器中运行。我在api_request.js和index.html文件所在的同一目录中安装了browserify,并将api_request.js中的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-公测。

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

^这是我用来建立bundle.js脚本。我能想到的唯一可能导致这个错误是browserify。还有什么可能导致这种情况?

回答

2

不幸的是,大多数IBM Watson API不支持CORS,因此无法在浏览器中使用。由于这个事实,watson-developer-cloud npm模块没有使用browserify编写,并以编程方式从磁盘加载一些文件。 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配合使用。