2016-09-11 4 views
5

Ich bekomme "HttpHandlers ist kein Konstruktor" Fehler beim Versuch, diese Klasse mit "neu" zu instanziieren.Node.js <Class> ist kein Konstruktor

Klasse instanziiert wird (../lib/restifyHandlers/HttpHandlers):

var config = require('config'); 
module.exports.config = config; 

var util = require('util'); 
var _ = require('underscore'); 
var EventEmitter = require("events").EventEmitter; 

var HttpHandlers = function(eventHandlers) { 
    var _self = this; 
    this.name = "HttpHandlers"; 
    if (!(this instanceof HttpHandlers)) { 
     return new HttpHandlers(eventHandlers); 
    } 
} 

util.inherits(HttpHandlers, EventEmitter); 

HttpHandlers.prototype.extractHttpHandlersRequest = function(req, res, next) { 
    var _self = this; 
    req.locals = {}; 
    res.locals = {}; 

} 
module.exports.HttpHandlers = HttpHandlers; 

-Code macht den Anruf:

var HttpHandlers = require('../lib/restifyHandlers/HttpHandlers'); 
var obj = new HttpHandlers(oneRouteConfig.eventHandlers); 

Stacktrace:

2016-09-10T23:44:41.571-04:00 - [31merror[39m: Sun, 11 Sep 2016 03:44:41 GMT Worker #master: exiting from error: TypeError: HttpHandlers is not a constructor 
TypeError: HttpHandlers is not a constructor 
    at setupRestifyRoute (/usr/apps/das/src/myrepo/nodejs/myapp/lib/router.js:78:14) 
    at Router.setup_routes (/usr/apps/das/src/myrepo/nodejs/myapp/lib/router.js:40:3) 
    at /usr/apps/das/src/myrepo/nodejs/myapp/bin/server.js:222:14 
    at initialize (/usr/apps/das/src/myrepo/nodejs/myapp/bin/server.js:38:9) 
    at setup_server (/usr/apps/das/src/myrepo/nodejs/myapp/bin/server.js:107:4) 
    at /usr/apps/das/src/myrepo/nodejs/myapp/bin/server.js:275:4 
    at /usr/apps/das/src/myrepo/nodejs/myapp/node_modules/temp/lib/temp.js:231:7 
    at FSReqWrap.oncomplete (fs.js:123:15) 
+0

Keine Notwendigkeit, neue es . 'HttpHandlers (oneRouteConfig.eventHandlers);' sollte einfach gut funktionieren. – vijayst

+0

@vijayst, habe ich versucht, und der Fehler, den ich dann bekomme, ist "HttpHandlers ist keine Funktion" – user994165

+0

Warum müssen Sie die Konfiguration in Zeile 2 reexportieren? Verwenden Sie einfach 'module.exports = HttpHandlers', um das zu exportieren und alles wird gut. – silkAdmin

Antwort

10

Wenn Sie dies zugewiesen :

exports.HttpHandlers = HttpHandlers; 

Sie müssten, dass mit diesem entsprechen:

var HttpHandlers = require('../lib/restifyHandlers/HttpHandlers').HttpHandlers; 

Sie sind eine Eigenschaft des Moduls zuweisen .HttpHandlers zu sein, nicht das gesamte Modul Zuordnung so, wenn Sie diese Eigenschaft wollen, müssen Sie verweisen die Eigenschaft.

exports = HttpHandlers; 

Und dann require() könnte die Art und Weise arbeiten Sie es wie folgt tun: Wenn Sie es wollen, die andere Art und Weise arbeiten, könnten Sie dies ändern

var HttpHandlers = require('../lib/restifyHandlers/HttpHandlers'); 
+0

Dank Bruder !! Ihre Antwort hat mir geholfen, meine Zeit zu sparen. –