2017-04-18 62 views
0

我花了一天的时间来解决这个问题。鉴于我的js知识已经过时,我最终要整理出一个“新”技术的妙处,让每个文档和作者期望你知道这些东西。这一切都创造了一个大的脑雾。所以我问,如果任何人都可以解释我如何在代码中启用require和Request请求。如何使用javascript要求?

具体来说,我在我的服务器上使用Hawk HTTP身份验证可以运行php API。我正在尝试从Github回购示例的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 is not defined

我能理解,这会导致需要当错误不是普通的JavaScript的一部分。我需要了解/学习/实施这项工作?请注意,这一切都在客户端。

+2

您需要一个模块打包程序,如[webpack](https://webpack.github.io/)或[browserify](http://browserify.org/)。 – evolutionxbox

+0

[Javascript require()函数给出ReferenceError:require没有定义]的可能重复(http://stackoverflow.com/questions/23603514/javascript-require-function-giving-referenceerror-require-is-not-defined) – evolutionxbox

+0

require()不是你的标准JavaScript的一部分。在您的问题和标签的上下文中,require()被构建到Node.js中以加载模块。 –

回答

1

您正在查看的模块旨在运行于(本机支持require),而不是在浏览器中运行。

可能能够得到它run in the browser,但它很可能是你不能由于same origin policy不应该,因为它会泄露您的凭据的人谁访问您的网站。

+0

谢谢您的回复。因此,应该在服务器上运行的客户端代码...对我没有意义:) – wyldcard

+1

@wyldcard - 不要将“NodeJS”与“服务器”混为一谈。 NodeJS只是运行JavaScript程序的一种方式。您可以在其中编写客户端软件。 (一个软件既可以是客户端,也可以是服务器:代理服务器是一个常见的例子,它列出来自HTTP客户端的请求,然后向其他HTTP服务器发出HTTP请求以获取数据提供给客户端) 。 – Quentin

+0

我接受了你的答案,我明白了。我确实尝试过,但我放弃了霍克,而是选择了智威汤逊。谢谢。 – wyldcard

1

requirenode API的一部分,且不适用于浏览器。为了在浏览器中使用模块,您需要首先通过捆绑器(如WebpackBrowserify)运行代码。

请注意,仍有一些模块(例如fs)由于它们与系统交互的方式(即从磁盘读取文件)而无法在浏览器中运行。我相信request属于同一类别。

由于其简单性,我建议您使用Browserify开始。

+0

谢谢你的回复。我会阅读browserify,并去看看它。 – wyldcard