我正在尝试使用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配合使用。