node.js htttp文件服務器 遇到目錄時搜索目錄內默認html頁面 廖雪峯javascript教程node.js中http部分練習題

廖雪峯javascript教程node.js中http部分最後的練習題:

https://www.liaoxuefeng.com/wiki/1022910821149312/1023025830950720

在瀏覽器輸入http://localhost:8080/時,會返回404,原因是程序識別出HTTP請求的不是文件,而是目錄。請修改file_server.js,如果遇到請求的路徑是目錄,則自動在目錄下依次搜索index.htmldefault.html,如果找到了,就返回HTML文件的內容。

如果在funDirFile內用異步方法,則還沒有確定文件是否能被讀取,函數就返回空值了。因此這裏使用的同步方法。

'use strict'

var http = require('http');
var fs = require('fs');
var path = require('path');
var url = require('url');

var root = path.resolve(process.argv[2] || '.');

var funDirFile = function (filePath, str) {
    var f1 = path.join(filePath, str);
    if(fs.statSync(f1).isFile())
        return f1;
};


var server = http.createServer(function (request, response) {
    var pathname = url.parse(request.url).pathname;
    var filePath = path.join(root, pathname);
    fs.stat(filePath, function (err, stats) {
        if (!err && stats.isFile()) {
            console.log(request.method + ': ' + filePath);
            response.writeHead(200);
            fs.createReadStream(filePath).pipe(response);
            return;
        } else if (!err && stats.isDirectory()) {
            var f = funDirFile(filePath, 'index.html');
            if (!f)
                f = funDirFile(filePath, 'default.html');
            if (f) {
                console.log(request.method + ': ' + f);
                response.writeHead(200);
                fs.createReadStream(f).pipe(response);
                return;
            }
        }
        console.log('404 ' + request.url);
        response.writeHead(404);
        response.end('404 Not Found');
    });
});

server.listen(8080);

console.log('Server is running at http://127.0.0.1:8080/');

剛學node.js,不太懂,這裏的同步會不會拖慢服務器速度,使之無法處理多種請求?

如果想改成異步應該怎麼改?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章