2017-08-30 143 views
0

我最初使用的是節點v4.4.5,並且運行nodemon似乎工作正常。一旦我安裝了更新的版本,一切都破裂了。我不太清楚爲什麼我得到這個錯誤,因爲我只是試圖讓一個簡單的節點運行。TypeError:第一個參數必須是字符串或緩衝區

繼承人的守則。

var http = require('http'); 
var fs = require('fs'); 
var server = http.createServer(function (request, response){ 
console.log('client request URL: ', request.url); 
if(request.url === '/') { 
    fs.readFile('index.html', 'utf8', function (errors, contents){ 
     response.writeHead(200, {'Content-Type': 'text/html'}); 
     response.write(contents); 
     response.end(); 
    }); 
} 
else { 
    response.writeHead(404); 
    response.end('File not found!!!'); 
} 
}); 
server.listen(8000); 
console.log("Running in localhost at port 8000"); 
+1

您能否定義在哪條線上出現錯誤?這個問題的一個原因可能是'response.write'這一行,因爲'content'是未定義的。也許'fs.readFile'回調已收到一個錯誤(錯誤),你沒有檢查這些錯誤。 –

+0

同意@MatteoRagni,導致錯誤的行號需要發佈。另外,這可能是一個讀取文件失敗的問題。 – shaochuancs

+0

它沒有指定。它會在終端中運行,但是一旦我轉到網絡上的本地主機,它會得到該錯誤。 – Gkata

回答

0

我在Node版本:V8.2.1上運行了你的代碼。 頁面呈現沒有任何錯誤。 安裝Node.js的最新穩定版本:V6.11.2

+0

由於讀取文件和寫入響應是非常基本的操作,因此不太可能成爲Node.js環境問題。 – shaochuancs

+0

它會在終端中運行,但只要在本地主機上打開它,就會發生錯誤。 – Gkata

+0

將您在根級目錄 如index.html的: - ' 服務器 | -app.js | -index.html ' –

0

不知道錯誤的路線是非常困難的。你使用的庫是非常基本的,你所使用的功能在所引用的版本中不應該不同(在接口方面)。

我建議你檢查讀取操作。 fs.readFile的回調具有尚未檢查的errors字段。如果發生錯誤,contents可能保持未定義狀態,因此錯誤由response.write方法引發,該方法需要緩衝區或字符串作爲參數。

你可以試試:

response.write(String(contents)); 

和你的網頁應該顯示一個簡單的 「不確定」 的字符串。如果是這種情況,那麼下一步就是了解爲什麼「index.html」無法打開。

您可以通過使用在線調試器的節點運行您的代碼行:

node inspect script.js 

您應該插入您希望通過線檢查線停止debugger;。檢查文檔here

+0

謝謝你的文檔。你是對的,它必須處理那個特定的行,因爲它沒有定義。這是錯誤給我的。 – Gkata

+0

客戶端請求URL:/ _http_outgoing.js:457 throw new TypeError('第一個參數必須是字符串或緩衝區'); – Gkata

相關問題