2016-03-17 3 views
0

Я пытаюсь расширить модуль Express и добавить его свой метод. для этого я использую Util модуль Мой кусок кода:Как добавить метод в модуль express() с использованием утилиты?

var expressApplication = require('express'); 
var util = require('util'); 

function Application() { 
    expressApplication.apply(this, arguments); 
    this.handlers = {}; 
} 
util.inherits(Application, expressApplication); 

//add my method 
Application.prototype.write = function(data) { 
    console.log(data) 
}; 

Тогда я назвал его:

var app = new Application(); 

//check inheritance 
console.log(app instanceof expressApplication); // true 
console.log(Application.super_ === expressApplication); // true 

//and check the work my method 
console.log(app.write('test')); 


console.log(app.use) /// ---> error!!! 

Но когда я хочу, чтобы вызвать метод экспресс - это не доступно мне , console.log(app.use) имеет значение app.use is not a function

Пожалуйста, сообщите мне, что не так, где искать исправление проблемы? В качестве альтернативы вместо этого я прослушивал экспресс-коа, там практикуется.

Спасибо!

+0

Вы забыли что-то использовать()? http://expressjs.com/en/4x/api.html#app.use – Cruiser

+0

нет, я не забыл(). Если вы выводите на консоль 'console.log (app.write)' он возвращает '[Function]'. Но 'console.log (app.use)' return 'undefined'. нет наследования 'express', и я не понимаю, почему – ennet

ответ

0

Функция, экспортируемая require('express'), представляет собой всего лишь factory function, который выполняет собственное прототипирование, поэтому на самом деле нет наследуемого объекта.

У вас есть несколько вариантов:

  • функция завод Copy Экспресс, которая использует свой собственный express.application подкласс
  • Непосредственно изменять оригинальный express.application

Пользу от первого является то, что вам не влияют на все экземпляры экспресс-приложений, которые, как правило, вы хотите. Написание прототипов сторонних модулей (или даже встроенных объектов в этом отношении), как правило, неодобрительно и может вызвать проблемы (особенно если конечные пользователи присоединяют свои собственные свойства с одинаковыми именами).

+0

Скажите, как лучше использовать первый вариант? – ennet

Смежные вопросы