2016-08-03 48 views
1

我還是新的JavaScript和node.js中,並試圖完成的東西,但我遇到了錯誤的ReferenceError:文件沒有定義的NodeJS使用文檔對象

考慮到單獨的文件下面的代碼:

的index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title>My Test Website</title> 
    <script type="text/javascript" src="script.js"></script> 
    <link rel="stylesheet" href="style.css"> 
</head> 
<body> 
    <p id="para1"> Some text here</p> 
</body> 
</html> 

而且的script.js:

function getParagraphContents() { 
    var paragraph = document.getElementById("para1"); 
    var temp = paragraph.textContent; 
    console.log(temp); 
} 

所以我問題在於我希望能夠從命令行運行命令node script.js,但不斷收到錯誤消息。我一直在閱讀其他答案和文檔,但似乎沒有正確的答案。有什麼建議麼?附:我在mac osx上使用終端並且正確安裝了節點和npm。

謝謝。

+0

爲什麼你需要那個? –

+1

您不能在Node.js中運行該客戶端腳本,這不是它的工作方式,腳本是針對瀏覽器的,而不是服務器。 – adeneo

+0

'script.js'被設計爲在瀏覽器中運行並在當前頁面的HTML上運行。運行'node script.js'實際上沒有任何意義。雖然可以找到將HTML文檔加載到節點中的庫,併爲它們提供DOM表示,然後可以運行一些類似瀏覽器的腳本,但這不是您在此嘗試的內容,因爲沒有關聯的文檔'script.js'。這本身就是一個腳本。所以運行'node script.js'就像是一個應用程序。你需要解釋你想從節點完成的事情。 – jfriend00

回答

0

script.js是一個腳本,用於在瀏覽器中運行,而不是在node.js中運行。它旨在在當前網頁上運行,並使用document對象訪問該頁面。

node.js執行環境與瀏覽器不一樣。例如,在瀏覽器中沒有「當前頁面」的概念,因此沒有全局的documentwindow對象,就像在瀏覽器中一樣。

所以,這全部解釋了爲什麼試圖運行node script.js不起作用。沒有全局的document對象,所以你的腳本很快產生一個錯誤並退出。


我們真的不能從你的問題告訴我,你剛纔真的不明白在瀏覽器中運行的腳本之間的差異與在node.js的環境中運行的腳本,這一切你需要有解釋或者如果你真的想在node.js中使用HTML文檔?

可以在node.js中的HTML頁面上操作。通常的做法是獲得像jsdom這樣的HTML解析庫。然後,您可以使用該庫加載一些HTML頁面,它將創建一個模擬的瀏覽器DOM,並使對象可以使用document對象,以便您可以在HTML文檔上執行類似瀏覽器的腳本。

+0

感謝jfriend00,這爲我清除了一切,並且一定會檢出jsdom。我只是不確定什麼節點js是真的。我瞭解腳本如何在瀏覽器中工作,但不知道它們在節點中的工作方式,因此我也會研究它們。 – unChartedZone