2016-08-16 3 views
-1

Я написал код server.js ниже:Почему я перенаправлен на страницу 404?

// Require modules 
const http = require('http'); 

const url = require('url'); 
const path = require('path'); 
const fs = require('fs'); 

// Array of Mime Types 
const mimeTypes = { 
    "html" : "text/html", 
    "jpeg" : "image/jpeg", 
    "jpg" : "image/jpeg", 
    "png" : "image/png", 
    "js" : "text/javascript", 
    "css" : "text/css" 
}; 

// Create Server 
const server = http.createServer(function(req, res){ 
    const uri = url.parse(req.url).pathname; 
    const fileName = path.join(process.cwd(),unescape(uri)); 
    console.log('Loading '+ uri); 
    const stats; 

    try{ 
     stats = fs.lstatSync(filename); 
    } catch(e) { 
     res.writeHead(404, {'Content-type': 'text/plain'}); 
     res.write('404 Not Found\n'); 
     res.end(); 
     return; 
    } 

    // Check if file/directory 
    if(stats.isFile()){ 
     const mimeType = mimeTypes[path.extname(fileName).split(".").reverse()[0]]; 
     res.writeHead(200, {'Content-type': mimeType}); 

     const fileStream = fs.createReadStream(fileName); 
     fileStream.pipe(res); 
    } else if(stats.isDirectory()){ 
     res.writeHead(302,{ 
      'Location' : 'index.html' 
     }); 
     res.end(); 
    } else { 
     res.writeHead(500, {'Content-type' : 'text/plain'}); 
     res.write('500 Internal Error\n'); 
     res.end(); 
    } 
}).listen(3000); 

У меня есть страница index.html, который просто говорит тест и вместо рендеринга, что в браузере я получаю 404 Страница не найдена. Поскольку я обновил файл server.js, я считаю, что проблема есть, но я не совсем уверен.

Кто-нибудь видит, как этот код сервера мог быть написан для лучшего сервера файла index.html, который у меня есть в проекте?

+0

Я бы предположил, что индексный файл находится в неправильном месте. Что выводит строка consolde.log («Загрузка» + uri)? Кроме того, в catch (e), который записывает 404, попробуйте console.log (e) и console.log (e.stack). Это должно дать вам больше информации для решения проблемы. –

ответ

0

Возможно:

stats = fs.lstatSync(fileName); 

и нет:

stats = fs.lstatSync(filename); 

Вы ошиблись переменной/параметров ... это чувствительно к регистру.

+0

Томас, мне плохо, я думал, что исправил все имена файлов в своем коде. – Daniel

+0

Есть еще что-то не так с моим кодом, я думаю, что он находится в const stats; Должно ли это быть var stats ;? – Daniel

+0

Я предполагаю, что на данный момент ... но может быть добавить res.end(); после fileStream.pipe (res) – Thomas

Смежные вопросы