2015-01-08 3 views
0

Мы должны создать простой сервер узлов HTTP, который должен ответить на запрос root-url с помощью файла index.html. Не используйте ExpressJS. Код должен иметь проверку ошибок и, по крайней мере, один обратный вызов. Поместите пять или более элементов html в ваш index.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 DOC http://nodejs.org/api/fs.html#fs_fs_exists_path_callback

+0

Спасибо за это, но я немного запутался - разве fs.exists, используемые для тестирования, путь к файлу верен или нет? Чтение через API ничего не предполагает иначе? –

+0

В узле программа не дает ошибку, когда файл не существует, на самом деле он устанавливает неопределенную переменную. Поэтому, читая файл с 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, который ожидает струнный путь, и вы даете ему индекс filehandler. Вот почему ошибка:

path must be a string 

Либо попробуйте использовать строку «index.html» и не читают его синхронизации там. Сделайте это асинхронная в CallBack существует

fs.exists("index.htm", function(){ fs.readFile("index.htm") 
Смежные вопросы