У меня есть приложение node.js, и я застреваю, получая сообщение об ошибке, когда пытаюсь загрузить домашнюю страницу. Я сделаю все возможное, чтобы изложить свою архитектуру ниже. Идет index.js --> server.js --> router.js --> requestHandlers.js.
Я использую комбинацию экспресс (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 (маршрут функции, переданный из индекса -> сервер, который вызывает функцию маршрута в router.js, вызывает 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? Я думаю, что node делает что-то в фоновом режиме, и я не совсем понимаю.
Дайте мне знать, если вам нужна дополнительная информация. Спасибо!