2014-01-25 1 views
0

Это промежуточноеновое связующее в экспресс-3 не удается

app.use(function (req, res, next){ 

    res.locals.appdata  = appdata; 
    res.locals.errorMessage = ""; 
    res.locals.information = {}; 
    res.errorFromServer  = function (req, res){ 

     var mensaje = res.locals.errorMessage; 

     res.status(500); 
     res.locals.errorMessage = ""; 

     return res.render('error/500',{errorMessage: mensaje || ""}); 
    } 

    next(); 
}); 

Я пытаюсь установить функцию в объект ответа, как этот answer

Я получаю эту ошибку

TypeError: Object #<ServerResponse> has no method 'errorFromServer' 

Почему мой код не работает?

+0

Где вы пытаетесь использовать 'res.errorFromServer()'? Является ли это промежуточное ПО 'use'd до' app.use (app.router) 'или первым маршрутом (' app.get() 'и т. Д.)? –

+0

используется после app.use (app.router – andrescabana86

+0

Заказ имеет значение с промежуточным программным обеспечением. Если 'app.router' является первым, тогда' errorFromServer' еще не будет определен для любого из ваших маршрутов. –

ответ

0

Основная проблема в вашем коде: вы использовали объект res и ответили return res.render(..). После чего используется next()?

И на вершине, что вы добавляете функцию (не значение) для res объекта (ответа, который вы упомянули использует req объект и называется функцией и она вернула значение и получает назначение в req объекта).

//Example 
function getBrowser() { 
    return this.get('User-Agent'); //This returns the value. 
} 

app.use(function (req, res, next) { 
    req.getBrowser = getBrowser; // You are assigning a value not a function itself. 
    next(); 
}); 
Смежные вопросы