近期使用nodejs开发后端,对接百度OCR(文字识别 图片识别)的时候需要获取access_token,以下是官方的node实例代码。
var https = require('https');
var qs = require('querystring');
const param = qs.stringify({
'grant_type': 'client_credentials',
'client_id': '您的 Api Key',
'client_secret': '您的 Secret Key'
});
https.get(
{
hostname: 'aip.baidubce.com',
path: '/oauth/2.0/token?' + param,
agent: false
},
function (res) {
// 在标准输出中查看运行结果
res.pipe(process.stdout);
}
);
res.pipe(process.stdout); 这行代码直接在控制台打印出来了,我们可以看到一个JSON的string类型,复制出来我们就可以看到JSON格式了,以下截图图1所示:
图1所示的红色框框中的access_token就是我们所要的。现在问题来了,现在只能打印到控制台,在js中,我们保存或者接收数据的时候,往往都是定义一个变量来接收数据,但node的话,如果数据量很大的话,系统就要开辟与之对应的内存,会占用较大内存,这时候就用到了pipe去进行读写流操作,更加优雅的完成任务,下面先贴代码。
https.get({
hostname: 'aip.baidubce.com',
path: '/oauth/2.0/token?' + param,
agent: false
}, function (res) {
// 在标准输出中查看运行结果
res.pipe(process.stdout);
// 写入文件
res.pipe(fs.createWriteStream('./baidu-token.json'));
}
);
在这我通过fs创建了一个写入流,这样便可以把对应的内容保存到本地对应的文件里,需要用的时候可以通过fs.readFileSync('./baidu-token.json', 'utf8');读取文件内容 , 非常方便。
前台获取access_token后,发现接口调用失败了,返回了几个错误码,我把我遇到的怎么处理的方法分享一下。
1、code:6 , msg:'No permission to access data' 没有权限调用,检查自己的Api Key 和 Secret Key 是否正确,然后查看该Api Key 对应的项目中你是否加入了你所需要的OCR接口,此处在百度控制台即可查看。
2、code:216201, msg:'image format error' 请求的参数应该是string类型,而不是json类型,应该用Qs.stringify({ image: img })来转义一下,当然得先import Qs from 'qs';
暂时遇到的问题就这些,以后有内容还会继续补充,欢迎提问。