我正在尝试做一个简单的服务器回答url / page1和/ page2; 这是模块dispatcher.js: var HttpDispatcher = function() {this.listeners = { get: [ ], post: [ ] }; this.errorListener = function() { } } HttpDispatcher.prototype.on
这是模块dispatcher.js:
var HttpDispatcher = function() { this.listeners = { get: [ ], post: [ ] }; this.errorListener = function() { } } HttpDispatcher.prototype.on = function(method, url, cb) { this.listeners[method].push({ cb: cb, url: url }); } HttpDispatcher.prototype.onGet = function(url, cb) { this.on('get', url, cb); } HttpDispatcher.prototype.onPost = function(url, cb) { this.on('post', url, cb); } HttpDispatcher.prototype.onError = function(cb) { this.errorListener = cb; } HttpDispatcher.prototype.dispatch = function(req, res) { var parsedUrl = require('url').parse(req.url, true); var method = req.method.toLowerCase(); if(this.listener[method][parsedUrl.pathname]) this.listener[method][parsedUrl.pathname](req, res) else this.errorListener(req, res); } module.exports = new HttpDispatcher();
这是服务器:
var dispatcher = require('./node_modules/httpdispatcher'); var http = require('http'); dispatcher.onGet("/page1", function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Page One'); }); dispatcher.onPost("/page2", function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Page Two'); }); http.createServer(function (req, res) { dispatcher.dispatch(req, res); }).listen(80, '127.0.0.1');
但是当我尝试执行服务器时,我收到错误:
D:\Works\Web Resources\NODE JS\node_modules\httpdispatcher.js:33
if(this.listener[method][parsedUrl.pathname])
this.listener[method][parsedUr
^ TypeError: Cannot read property ‘get’ of undefined
谁知道为什么?
这可能是一个错字if(this.listener[method][parsedUrl.pathname]) this.listener[method][parsedUrl.pathname](req, res)
我认为这是this.listeners(带-s)
第二个问题(来自评论):
HttpDispatcher.prototype.on = function(method, url, cb) { this.listeners[method][url] = cb; }
这样,您可以检查URL是否存在(就像您已经做过的那样),并像您一样访问该功能.