2

この単純な app.js を機能させることができません。静的ファイルは提供されますが、jade および styl ファイルはコンパイルされません。ここに __dirname ls:

damianomacbook:www damiano$ ls
app.jade    app.js      app.styl    config.xml  johnd.jpg

.jade および .styl ファイルは通常どおりプレーンで提供されます。css および html ファイル (ミドルウェア関数がオンザフライで生成することになっている) を curl するとどうなるかを次に示します。

damianomacbook:www damiano$ curl localhost:8080/app.css
curl: (52) Empty reply from server
damianomacbook:www damiano$ curl localhost:8080/app.html
Cannot GET /app.html

何が欠けていますか?

有罪コード:

var express = require('express');
var stylus = require('stylus');
var nib = require('nib');

var app = express();
function compile(str, path) {
   return 
      stylus(str)
      .set('filename', path)
      .use(nib());
}

app.use(express.logger('dev'));

app.set('views', __dirname);
app.set('view engine', 'jade');

app.use(stylus.middleware({ 
    src: __dirname,
    compile: compile
}));

app.use(express.static(__dirname));

app.listen(8080);
4

1 に答える 1

1

HTML ページの提供はミドルウェアではなく高速ルーターで行われ、ルートが定義されていないため、GET /app.html が失敗しています。静的ミドルウェアは何も変換しない (したがって名前) ため、ディスク上に/app.html実際のファイルがない限り機能しません。app.html作業を開始するに/app.htmlは、次を追加します。

app.get('/app.html', function (req, res) { res.render('app');});
//or you probably want app.get('/', ...if you want this to be your home page
//you probably also don't want/need ".html" in your URLs as this has fallen out of style

スタイラスの問題は、自動セミコロン挿入モンスターです。「return」キーワードを単独で行に入れてはいけません。スタイラスインスタンスの代わりにcompile関数が返されます。nibのドキュメントにあるようにフォーマットをundefined維持してください。すべて問題ありません。compile

于 2013-10-05T14:35:26.343 に答える