2016-05-17 35 views
0

Expressを使用してNode.jsプロジェクトを作成しました。カスタマイズされたルートを使用する場合にこの例外が発生しました。Express&Node.js例外:500 TypeError:fnが関数ではありません

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)

そして私は

/* 
* GET Webhook. 
*/ 

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

は、しかし、私はアプリでルートを宣言するために別の方法を使用し、

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

そして、私のwebhook.js中でapp.js内のルートを宣言.jsのように

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

私はそれを取得しません。

なぜ誰が知っていますか?

答えて

1

はその代わりに、エクスポートされたモジュールオブジェクトのwebhookプロパティを使用したい

/* 
* GET Webhook. 
*/ 

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

var webhookは次のようになります。

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

だからあなたのルートハンドラの設定は次のようになります。Expressは関数の引数ではなく、オブジェクトを望んでいるため、無効である

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

。このように見て、あなたのwebhook.jsファイルを変更することができ、他の解答の代替ソリューションとして

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

ありがとうRobert、それは愚かな構文エラーのように見えます。しかし、node.jsをデバッグする良い方法を知っていますか?地点を突き止め、ローカル変数の値を見たいのですか? –

+0

@HaichenLiuあなたは['node-inspector'](https://github.com/node-inspector/node-inspector)を試すことができます。これは私の経験ではうまくいきます。 – robertklep

関連する問題