node.js アプリケーションを使用していますが、ホームページを読み込もうとするとエラー メッセージが表示されます。以下に私のアーキテクチャをレイアウトするために最善を尽くします。index.js --> server.js --> router.js --> requestHandlers.js になります。
Express (www.expressjs.com) と nodebeginner.org を組み合わせて使用しています。長い質問で申し訳ありません..できるだけ多くの情報を取得したかっただけです.
index.js (パス名/リクエストハンドラー情報を含むハンドル オブジェクトを作成し、関数を呼び出してサーバーを起動します) ここでは router.route から始めて、各ステップに渡します
var server = require("./server");
var router = require('./router');
var requestHandlers = require('./requestHandlers');
// Routes
var handle = {}
handle['/'] = requestHandlers.home;
server.start(router.route, handle)
server.js (サーバーを起動します。ここでサーバーを構成し、URL からパス名を取得し、それをルート モジュールに渡します)
var http = require("http");
var url = require('url');
var express = require('express');
function start (route, handle) {
var onRequest = function(request, res) {
var pathname = url.parse(request.url).pathname;
console.log("request for " + pathname + " recieved.");
route(handle, pathname, res);
}
var app = express.createServer(onRequest).listen(8888);
if (app.configure) {
console.log('app exists'); //logging correctly
}
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); //logs correct with 8888 and development
}
exports.start = start;
router.js (index から渡された関数 route --> router.js で route 関数を呼び出すサーバーは、ハンドル オブジェクトでパス名に一致する requestHandler を呼び出します)
function route (handle, pathname, res) {
console.log("About to route a request for" + pathname); //About to route a request for/stylesheets/style.css SEE BELOW******* this is the error
if (typeof handle[pathname] === 'function') {
handle[pathname] (res);
}
else {
console.log('no request handler found for' + pathname);
}
}
exports.route = route;
requestHandler.js (res/req オブジェクトと対話し、関数は特定のパス名にマップされ、ルーターのおかげでそれらのパス名が要求された場合にのみ呼び出されます)
var home = function(res){
res.render('index', { title: 'WWYB?' });
console.log('homepage rendered'); //correctly logs for pathname = '/'
//click();
};
exports.home = home;
** * localhost:8888 をリクエストしようとすると、大量のリクエストが試行されます。最初は「/」を正しく要求しますが、「/stylesheets/style.css の要求をルーティングしようとしています」というすべてのログを記録し続け、最終的にページは css なしで読み込まれます。私のlayout.jadeファイルに示されているパス名は、まさに「/stylesheets/style.css」です。
パス名が /stylesheets/style.css に評価されるのはなぜですか? ノードはバックグラウンドで何かをしていると思いますが、完全には理解していません。
さらに情報が必要な場合はお知らせください。ありがとう!