Angular 5中无法导入oauth-1.0a的问题求助
解决Angular中oauth-1.0a导入及配置问题
我来帮你搞定这个OAuth导入的问题!从你给出的代码片段来看,主要有几个需要调整的地方,咱们一步步来:
1. 先修正导入方式
oauth-1.0a的导出方式有点特殊,它默认是一个函数,不是你写的import { OAuth } from 'oauth-1.0a'这种命名导出。你得改成下面两种导入方式之一:
// 方式一:整体导入 import * as OAuth from 'oauth-1.0a'; // 方式二:默认导入(需要tsconfig.json开启allowSyntheticDefaultImports) import OAuth from 'oauth-1.0a';
2. 补全hash_function的实现
你代码里的hash_function没写完,而且在Angular环境下得用crypto-js来实现HMAC-SHA1哈希逻辑。首先确保你已经装了crypto-js:
npm install crypto-js --save
然后在服务里正确导入并完善哈希函数:
import * as crypto from 'crypto-js'; // 在constructor里初始化OAuth的时候补全 this.oauth = OAuth({ consumer: { key: 'ck_123', secret: 'cs_452' }, signature_method: 'HMAC-SHA1', hash_function: (baseString, key) => { // 按OAuth要求返回Base64编码的HMAC-SHA1结果 return crypto.HmacSHA1(baseString, key).toString(crypto.enc.Base64); } });
3. 解决类型报错(可选)
如果编辑器提示类型找不到,装一下oauth-1.0a的类型声明文件就行:
npm install @types/oauth-1.0a --save-dev
完整的wc.service.ts示例代码
把这些调整整合后,你的服务文件应该是这样的:
import { Injectable } from '@angular/core'; import * as crypto from 'crypto-js'; import * as OAuth from 'oauth-1.0a'; @Injectable() export class WcService { oauth: OAuth; constructor() { this.oauth = OAuth({ consumer: { key: 'ck_123', secret: 'cs_452' }, signature_method: 'HMAC-SHA1', hash_function: (baseString, key) => { return crypto.HmacSHA1(baseString, key).toString(crypto.enc.Base64); } }); } // 举个例子:生成请求用的OAuth头 getOAuthHeaders(url: string, method: string, requestParams: any) { const requestDetails = { url: url, method: method, data: requestParams }; return this.oauth.authorize(requestDetails); } }
最后排查下常见坑
- 看看node_modules里有没有
oauth-1.0a和crypto-js文件夹,确保安装没出错 - 如果还是报模块找不到,检查下tsconfig.json里的模块配置,比如是否开启了
esModuleInterop - 控制台的错误信息是关键,要是有具体报错可以对着再调整
内容的提问来源于stack exchange,提问作者Padilla Tobi Ernesto IV
相关产品推荐
相关产品推荐

