2016-02-27 100 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

哈哈。那麼,如果這是你需要的,隨時接受答案。節點主要用於服務器端代碼,但有一些技巧可以做更多:) –