当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 带有Node JS的Dispatcher

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试做一个简单的服务器回答url / page1和/ page2; 这是模块dispatcher.js: var HttpDispatcher = function() {this.listeners = { get: [ ], post: [ ] }; this.errorListener = function() { } } HttpDispatcher.prototype.on
我正在尝试做一个简单的服务器回答url / page1和/ page2;
这是模块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是否存在(就像您已经做过的那样),并像您一样访问该功能.

网友评论