2016-02-27 93 views
0

我是新来的节点,正在练习使用request模块发出http请求。在我的脚本中,当用户按下按钮时,我希望它的回调函数发出请求,从网页获取HTML并对其进行过滤以获取数据数组。来自HTML的呼叫节点请求

我的服务器请求本身是有效的,但是当我尝试将它与HTML结合时,似乎没有任何事情发生。我的HTML看起来像这样:

<!DOCTYPE html> 

<html> 
<head> 
    <link type="text/css" rel="stylesheet" href="test1.css" /> 
    <script src = "posts.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
</head> 
<body> 
    <p id = "myText">Hello, this is dog</p> 
    <button onclick="getPosts()">Get Posts</button> 
</body> 
</html> 

和posts.js是这样的:

var request = require('request'); 

function getPosts(){ 
    alert('Hello'); 
    var matches = []; 
    request('https://www.reddit.com/r/TagPro/top/?sort=top&t=all', function (error, response, body) { 
     // Handle errors properly. 
     if (error || response.statusCode !== 200) { 
      return res.writeHead(error ? 500 : response.statusCode); 
     } 

     // Accumulate the matches. 
     var re = /tabindex="1" >(.+?)</g; 
     var match; 
     while (match = re.exec(body)) { 
      matches[matches.length] = match[1]; 
     } 
     $("#myText").text(JSON.stringify(matches)); 
    }); 
} 

在按下按钮,“你好”被警告,但是,它似乎后没有任何反应。这是将节点与前端链接的正确方法,还是我以错误的方式处理这个问题?

回答

2

如果您在浏览器中运行此操作,那么问题是您无法在浏览器中使用Node包,而无需额外的工具。

如果您检查您的控制台,您可能会看到有关“要求”为undefined的信息。

您应该了解如何使用诸如Webpack(或Browserify)之类的工具来使您的Node包在浏览器中可用。

如果您想保持简单,请不要使用Node请求库作为客户端(浏览器)代码。阅读如何使用jQuery或本机XMLHttpRequest API定期发出Ajax请求。

你可以只用一些替代的request调用,比如

$.get('http://someurl.com', function (data) { // stuff });

+0

谢谢,我会研究Browserify。我想我仍然需要了解实际使用哪个节点,如果我知道你可以使用Jquery来做到这一点,我不会对此感到兴奋。 – MarksCode

+0

哈哈。那么,如果这是你需要的,随时接受答案。节点主要用于服务器端代码,但有一些技巧可以做更多:) –