我花了一天时间试图解决这个问题。鉴于我的js知识已经过时,我最终将整理出一种“新”技术,其中每个文档和作者都希望您了解这些内容。这一切都创造了一个大脑。所以我问是否有人可以解释我如何在我试用的代码中启用require和Request。
具体来说,我的服务器上有一个使用Hawk HTTP身份验证的php API。我正在尝试从Github repo中获取示例javascript。
https://github.com/hueniverse/hawk
客户代码:
const Request = require('request');
const Hawk = require('hawk');
// Client credentials
const credentials = {
id: 'dh37fgj492je',
key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
algorithm: 'sha256'
}
// Request options
const requestOptions = {
uri: 'http://example.com:8000/resource/1?b=1&a=2',
method: 'GET',
headers: {}
};
// Generate Authorization request header
const header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });
requestOptions.headers.Authorization = header.field;
// Send authenticated request
Request(requestOptions, function (error, response, body) {
// Authenticate the server's response
const isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });
// Output results
console.log(`${response.statusCode}: ${body}` + (isValid ? ' (valid)' : ' (invalid)'));
});
错误
ReferenceError:未定义require
我可以说,当require不是普通javascript的一部分时,这会导致错误。我需要了解/学习/实施这项工作吗?请注意,这一切都在客户端。
答案 0 :(得分:2)
您正在查看的模块旨在在NodeJS下运行(对[{1}}具有原生支持),而不是在浏览器中运行。
您可能能够将其转到run in the browser,但由于same origin policy 而您可能无法 不应该,因为它会将您的凭据泄漏给访问您网站的任何人。
答案 1 :(得分:1)
require
是node API的一部分,在浏览器中不可用。要在浏览器中使用模块,您需要先通过Webpack或Browserify等捆绑器运行代码。
请注意,由于它们与系统交互的方式(即从磁盘读取文件),仍然有一些模块(例如fs
)无法在浏览器中运行。我相信request
属于同一类别。
由于其简单性,我建议您使用Browserify开始。