2016-12-21 2 views
-1

Я пытаюсь создать сервер без выражения. Определите URL-адрес, а затем ответьте с помощью html.проблема с end в nodejs

если URL является «/» ответ является index.html, и если URL-адрес является «/ био» ответ является bio.html

Проблема заключается в том, когда я хочу, чтобы вернуться к «/» и получить индекс после '/ bio'

http.createServer(function (req,res){ 
    var pathName = url.parse(req.url).pathname; 
    console.log(pathName); 

    if(pathName === '/bio'){ 
    fs.readFile("./bio.html", function (a, bio){ 
     res.writeHead(200, {"Content-Type": "text/html"}); 
     res.write(bio); 
     res.end(); 
    }); 
    }; 

    fs.readFile('./index.html', function(err, index){ 
    console.log(req.url); 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(index); 
    res.end(); 
    }); 

}).listen(8888); 

Когда я должен закончить ответ?

+0

Какая ошибка вы получаете? –

+0

Во всех случаях вы обслуживаете index.html, ставьте ключевое слово 'return' перед' fs.readFile ("./ bio ....' –

ответ

1

Технически вы должны разрешить только одну ветвь кода для вызова res.end().

В вашем случае код должен выглядеть следующим образом

if(pathName === '/bio'){ 
    fs.readFile("./bio.html", function (a, bio){ 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(bio); 
    res.end(); 
    }); 
} 
else { 
    fs.readFile('./index.html', function(err, index){ 
    console.log(req.url); 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(index); 
    res.end(); 
    }); 
} 

Я бы рекомендовал введение общего статического обработчика файла:

// assuming we have access to the current `res` object 
function serveStatic(filePath, callback) { 
    fs.readFile(filePath, function() { 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(bio); 
    res.end(); 

    callback(); 
    }) 
} 

var filePath; 
if(pathName === '/bio') { 
    filePath = './bio.html'; 
} 
else { 
    filePath = './index.html'; 
} 

serveStatic(filePath, function() { 
    console.log('Done!'); 
}); 
0

Вам нужно будет остановить поток при отправке ответа попробовать return res.end() в место res.end().

+0

Согласитесь! Асинхронный характер NodeJS может сделать сумасшедших разработчиков. много явным «возвратом». Если вы чувствуете, что просто возвращать 'res.end()' просто неудобно, вы можете сделать возврат сразу после 'res.end()'. –

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