node.js отправляет css файлы - PullRequest
2 голосов
/ 22 июля 2010

Я пытаюсь заставить сервер node.js отправлять CSS-файлы.Я модифицирую этот сервер здесь:

http://github.com/LearnBoost/Socket.IO-node/blob/master/test/server.js

Что не так с тем, что я делаю:

server = http.createServer(function(req, res){
    // your normal server code
    var path = url.parse(req.url).pathname;
    switch (path){
        case '/':
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.write('<h1>Welcome. Try the <a href="/chat.html">chat</a> example.</h1>');
            res.end();
            break;

        default:
            if (/\.(js|html|swf)$/.test(path)){
                try {
                    var swf = path.substr(-4) === '.swf';
                    res.writeHead(200, {'Content-Type': swf ? 'application/x-shockwave-flash' : ('text/' + (path.substr(-3) === '.js' ? 'javascript' : 'html'))});
                    res.write(fs.readFileSync(__dirname + path, swf ? 'binary' : 'utf8'), swf ? 'binary' : 'utf8');
                    res.end();
                } catch(e){ 
                    send404(res); 
                }               
                break;
            }
            else if (/\.(css)$/.test(path)){
                    res.writeHead(200, {'Content-Type': 'text/css'});
                    res.end();
                    break;
            }

            send404(res);
            break;
    }
});

Спасибо.

Ответы [ 2 ]

4 голосов
/ 22 июля 2010

Вы пишете только заголовок ответа для запросов CSS, для одного.

Я полагаю, что если вы позвоните curl -I http://your-server/some-file.css, вы получите статус 200 с длиной контента равной 0. Вы можете просто получить:

res.write(fs.readFileSync(__dirname + path, 'utf8'));

Но а.) Не повторяйте себя, и б.) «Синхронизация» в обоих этих методах означает синхронность. Вероятно, это не для этой версии, но в Node в целом, вы должны просто позвонить readFile и передать обратный вызов для завершения запроса позже. API не подходит для прямых ссылок, но раздел Файловая система должен помочь, ищите fs.readFile.

2 голосов
/ 22 июля 2010

Вы забыли отправить файл.

...
else if (/\.(css)$/.test(path)){
    res.writeHead(200, {'Content-Type': 'text/css'});
    res.write(fs.readFileSync(__dirname + path, 'utf8')); // <--- add this line
    res.end();
    break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...