2016-05-17 6 views
0

Ich habe ein Node.js-Projekt mit Express erstellt und diese Ausnahme bei Verwendung von benutzerdefinierten Routen erhalten.Express & Node.js Ausnahme: 500 TypeError: Fn ist keine Funktion

500 TypeError: fn is not a function at callbacks (/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:272:11) at param (/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:246:11) at pass (/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:253:5) at Router._dispatch (/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:280:5) at Object.Router.middleware [as handle] (/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:45:10) at next (/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15) at Object.methodOverride [as handle] (/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:35:5) at next (/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15) at Object.bodyParser [as handle] (/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:88:61) at next (/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15)

und erkläre die Routen in app.js von

var webhook = require('./routes/webhook.js'); 
app.get('/', routes.index); 
app.get('/webhook', webhook); 

Und in meinem webhook.js,

/* 
* GET Webhook. 
*/ 

exports.webhook = function(req, res){ 
    res.render('index', { title: 'Webhook' }) 
}; 

Allerdings benutze ich einen anderen Weg, um die Route in App zu erklären .js, wie

app.get('/webhook', function(req, res){ 
    res.render('index', { title: 'Webhook' }) 
}); 

Ich bekomme das nicht ex Aufnahme.

Weiß jemand warum?

Antwort

1

Als alternative Lösung auf die andere Antwort, die Sie Ihre webhook.js Datei wie folgt aussehen kann sich ändern:

/* 
* GET Webhook. 
*/ 

exports = module.exports = function(req, res){ 
    res.render('index', { title: 'Webhook' }) 
}; 
3

var webhook sieht wie folgt aus:

app.get('/webhook', { 
    "webhook" : function(req, res) { ... } 
}); 

Welche ungültig ist, weil Express ein Funktionsargument will, kein Objekt:

{ 
    "webhook" : function(req, res) { ... } 
} 

So Setup Ihre Route Handler wie folgt aussieht.

Stattdessen möchten Sie webhook Eigenschaft des exportierten Modulobjekt verwenden:

var webhook = require('./routes/webhook.js').webhook; 
+0

Dank Robert, es sieht aus wie ein dummer Syntaxfehler. Aber wissen Sie eine gute Möglichkeit, node.js zu debuggen, einen Breakpoint zu haben und den Wert von lokalen Variablen zu sehen? –

+0

@HaichenLiu können Sie versuchen, ['node-Inspector'] (https://github.com/node-inspector/node-inspector), die ziemlich gut in meiner Erfahrung funktioniert. – robertklep

Verwandte Themen