所以我是一個系統程序員,目前教授自己的Web應用程序編程。在學習新知識的時候總是這樣,我還沒有牢牢把握慣用的實現方式,或者簡單地說,如何做到「正確」的方式。節點中的路由請求和結構化響應處理程序
在花費了一些時間來構建幾個遊戲和一些簡單的UI之後,我只使用HTML和JavaScript,現在我正在冒險進入一個不平凡的動態應用程序。我使用Node作爲我的服務器,並且有關如何路由響應處理程序的問題。
我正在關注(看似)nice guide found here。這是我迄今爲止發現的唯一向導,它會指導您如何構建一個實際的應用程序(而不是像response.write("Hello world"); response.end();
之類的東西)。
筆者提出加入響應處理程序,像這樣:
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
server.start(router.route, handle);
的代碼應該是不言自明的,但本質上他是用一個對象作爲一個關聯容器映射在查詢字符串要求的資源處理程序。這一切都很好,但我希望避免每次添加新處理程序時在此文件中添加一行。
我的想法是這樣的;爲每個處理程序創建一個模塊並使用一些通用接口來處理響應。喜歡的東西:
function handleReq(...) {
...
}
exports.handleRequest = handleReq;
然後我可以只是require
動態模塊,即
// in my router module
function route(pathName, args) {
// where 'pathName' is something obtained
// in a manner like so in the request handler:
// url.parse(request.url).pathname;
var handler = require(pathName);
handler.handleRequest(args);
}
有一些缺陷,我不會在這種方法中看見了什麼?看起來好像它會減少冗餘代碼,但作爲這個領域的新手,我很懷疑。也許作者只是想保持簡單,或者我想可能是這樣,我錯過了一些東西。
歡呼聲,並提前致謝。不要隨意將其他看似無關的建議扔在我身上,如果你有理由這樣做。
聽起來不錯,謝謝你,先生。在教程中很難找到真實世界類型的用法,關閉以查找一些開放源代碼來審查... –
我昨天晚上用我的方法注意到的一個問題;很難區分啓動腳本和請求靜態資源。無論如何,我會在github的一臺路由器上運行,因爲這更像是一次學習體驗。在路由請求之前,我可能需要根據GET的位置進行過濾。 –
在我所做的幾件事情中,我包含了node_static模塊。使用它,您可以首先檢查請求是否可以作爲靜態資源處理,如果不是,請嘗試將其作爲腳本處理。或者相反。 – rob