2016-09-11 15 views
5

Tôi nhận được lỗi "HttpHandlers không phải là hàm tạo" khi cố gắng tạo nhanh lớp đó bằng cách sử dụng "mới".Node.js <Class> không phải là hàm tạo

lớp được khởi tạo (../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; 

Mã thực hiện cuộc gọi:

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

Không cần phải mới nó . 'HttpHandlers (oneRouteConfig.eventHandlers);' chỉ hoạt động tốt. – vijayst

+0

@vijayst, tôi đã thử điều đó và lỗi tôi nhận được sau đó là "HttpHandlers không phải là một chức năng" – user994165

+0

Tại sao bạn cần phải xem xét lại cấu hình trong dòng 2? Chỉ cần sử dụng 'module.exports = HttpHandlers' để xuất và bạn sẽ bị phạt – silkAdmin

Trả lời

10

Khi bạn đã gán này :

exports.HttpHandlers = HttpHandlers; 

Bạn sẽ cần phải phù hợp mà với điều này:

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

Bạn đang chuyển nhượng một tài sản của mô-đun của bạn sẽ được .HttpHandlers, không giao toàn bộ mô-đun vì vậy nếu bạn muốn điều đó bất động sản, bạn cần phải tham khảo bất động sản. Nếu bạn muốn nó làm việc theo cách khác, bạn có thể thay đổi như sau:

exports = HttpHandlers; 

Và, sau đó bạn require() có thể làm việc theo cách bạn đang làm nó như thế này:

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

Cảm ơn bro !! Câu trả lời của bạn đã giúp tiết kiệm thời gian của tôi. –

Các vấn đề liên quan