我有一個node.js應用程序,當我嘗試加載主頁時,我卡住了一個錯誤消息。我會盡我所能在下面佈置我的架構。它是index.js - > server.js - > router.js - > requestHandlers.js使用express來設置一個基本的服務器
我使用express(www.expressjs.com)和nodebeginner.org的組合。對不起,很長的問題..只是想盡可能多地獲取信息。
index.js(創建一個包含路徑/ requesthandler信息處理對象,調用函數來啓動服務器),我開始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中的路由功能,調用requestHandle該路徑名在手柄對象匹配R)
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;
** *當我去請求本地主機:8888它試圖做出一堆請求。首先它會正確地請求「/」,但是會繼續記錄所有說「關於爲/ stylesheets/style.css發送請求」的所有內容。最終,頁面將不加載css。我的layout.jade文件中指出的路徑名正是'/stylesheets/style.css'。
爲什麼路徑名曾經評估爲/stylesheets/style.css?我認爲節點在後臺執行某些操作,但我沒有完全理解它。
讓我知道你是否需要更多信息。謝謝!
謝謝你kevin。我試着將你的配置分成獨立的模塊,就像你所建議的那樣,但我仍然遇到同樣的問題。我會檢查這些鏈接。謝謝! –
爲什麼在代碼中使用'$ express'變量名稱而不是'express'? – Erik
這只是一個避免名稱衝突的慣例。假設你想使用路徑模塊,使用這個約定,你可以創建一個帶有路徑參數的函數,沒有歧義。它還使依賴變量快速識別和區別。有些人使用所有大小寫,但我認爲這是一個壞主意,我們通常將它用於常量值,而模塊不是常量。另外,許多前端框架使用美元符號作爲全局名稱空間,所以美元前綴對我來說感覺非常一致。 – kevin