2015-01-08 78 views
0

我們應該創建一個簡單的http節點服務器,該服務器應該使用名爲index.html的文件響應root-url請求。不要使用ExpressJS。代碼應該有錯誤檢查和至少一個回調。在您的index.html中放入五個或更多html元素。其中一個元素應該是到外部頁面的鏈接。嘗試運行時出現綁定錯誤節點http服務器

這是我的代碼有:

var http = require("http"); 
var fs = require('fs'); 
var index = fs.readFileSync('index.html'); 


var server = http.createServer(function(request, response) { 

fs.exists(index, function(exists) { 
    try { 
     if(exists) { 
  response.writeHead(200, {"Content-Type": "text/html"}); 
  response.write("<html>"); 
  response.write("<head>"); 
  response.write("<title>Hello World!</title>"); 
  response.write("</head>"); 
  response.write("<body>"); 
    response.write("<div>"); 
  response.write("Hello World!"); 
    response.write("</div>"); 
    response.write("<a href='http://www.google.com' target='_blank'>Google</a>") 
  response.write("</body>"); 
  response.write("</html>"); 
     } else { 
     response.writeHead(500); 
     } 
    } finally { 
     response.end(index); 
    } 
}); 
}); 
  
server.listen(80); 
console.log("Server is listening"); 

而且我得到這個綁定錯誤:

服務器偵聽

fs.js:166 
    binding.stat(pathModule._makeLong(path), cb); 
     ^
TypeError: path must be a string 
    at Object.fs.exists (fs.js:166:11) 
    at Server.<anonymous> (/Users/rahulsharma/Desktop/server.js:8:4) 
    at Server.emit (events.js:98:17) 
    at HTTPParser.parser.onIncoming (http.js:2112:12) 
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23) 
    at Socket.socket.ondata (http.js:1970:22) 
    at TCP.onread (net.js:527:27) 

有什麼想法?

回答

0

與「index.html的」更換指標變量將做的工作,但

請不要使用fs.exists,讀它的API文檔 http://nodejs.org/api/fs.html#fs_fs_exists_path_callback

+0

感謝這一點,但我有點糊塗 - 是不是fs.exists用於測試文件路徑是否正確?通過API閱讀,沒有任何其他的建議? –

+0

在節點中,當文件不存在時,程序不會給出錯誤,實際上它將變量設置爲undefined。因此,如果索引設置爲undefined,那麼在使用fs.readFileSync()讀取文件時,它不存在,否則您就知道該怎麼做。 – pratiklodha

0

將index.html放在.js文件中。把所有的HTML放在那個文件中。

var http = require("http"); 
var fs = require('fs'); 

var server = http.createServer(function(req, res) { 
    fs.readFile("index.html",function(err,content){ 
     if(err){ 
      throw err; 
      console.log("Error reading index file."); 
      res.send("Aw snap!"); 
     } 
     else{ 
      res.writeHead(200,{"Content-type":"text/HTML"}); 
      res.end(content,"UTF-8"); 
     } 
    }); 
}); 
server.listen(80); 
0

根據您堆棧跟蹤誤差在這一行內:

fs.exists(index, function(exists) 

傳遞給這個函數(檢查是否給定的文件存在)什麼是真正的文件內容。你應該通過的第一個參數可能是"index.html"而不是index變量

0

您試圖調用fs.exists,它需要一個字符串路徑,並且您要給它一個文件處理程序索引。 這就是爲什麼錯誤是:

path must be a string 

可嘗試使用字符串「的index.html」,不讀它同步出現。做到這一點異步的存在回調

fs.exists("index.htm", function(){ fs.readFile("index.htm") 
相關問題