slowjet

is a part of a carburetor

CSSやJSファイルを読み込めるようにする

CSSは /css/* に、JSは /js/* に置いていく前提で。 リクエストがあったときに該当するファイルが存在してれば fs.readFileでファイルを返すようにする。 返すときはres.writeHead(200, {'Content-Type': contentType});でContent-Typeをheadに含めて返す。

var fs = require('fs')
  , path = require('path')
  , express = require('express')
  , app = express.createServer();

// staticなCSS, JSファイル
app.get(/^\/(?:css|js)\/.+/, function(req, res) {
    var contentType = undefined
      , filePath = __dirname + req.url;
      // req.url は絶対パスになってるので
      // __dirnameでファイルパスへ置き換える
      
    // ファイルタイプでcontentTypeを切り替え
    switch( path.extname(req.url) ) {
    // extname(hoge)はURLの最後の.以降を返す
    // hoge.css => .css
    case '.css':
        contentType = 'text/css';
        break;
    case '.js':
        contentType = 'text/javascript';
        break;
    default:
        contentType = 'text/html';
    }

    // ファイルがあればほげほげ
    path.exists(filePath, function(exists) {
        console.log(exists);
        if ( exists ) {
            fs.readFile(filePath, function(error, content) {
                if ( error ) {
                    res.writeHead(500);
                    res.end();
                } else {
                    res.writeHead(200, {'Content-Type': contentType});
                    res.end(content, 'utf-8');
                }
            });
        } else {
            res.writeHead(404);
            res.end();
        }
    });
});