2016-07-19 4 views
1

Я пытаюсь сделать некоторые вещи до того, как вызывается оригинальный app.get.Expressjs ejs fn.apply error 'View is not a constructor'

Я нашел this страница, я пробовал, что они сделали, и это в основном работало, ожидайте, когда я попытаюсь использовать движок рендеринга с ним.

код я использую (app является результатом express()):

const express = require('express'); 
const app = express(); 
const ejs = require('ejs'); 
app.set('view engine', 'ejs'); 

var originalfoo = app.get; 
app.get = function() { 
    // Do stuff before calling function 
    console.log(arguments); 
    // Call the function as it would have been called normally: 
    originalfoo.apply(this, arguments); 
    // Run stuff after, here. 
}; 

app.get('/home', function (req, res) { 
    //res.send('hello world') // This works 
    res.render('index'); // This crashes 
}); 

res.render дает мне эту ошибку: TypeError: View is not a constructor

Кто-нибудь знает, как я могу это исправить? не

PS: /views/index.ejs существует

ответ

2

Вам просто нужно вернуть первоначальный вызов функции, в противном случае декорированных app.get метод больше не возвращается ничего в отличии от оригинала:

app.get = function() { 
    // Call the function as it would have been called normally: 
    return originalfoo.apply(this, arguments); 
}; 
+0

Это действительно сделал трюк! спасибо! – CreasolDev