3

Mike Wilson の本のサンプル アプリを実行しようとしていますが、次のエラーが表示されます。

pcassiano@...:~/socialnet$ sudo node app.js

/home/pcassiano/socialnet/app.js:60
  require('./routes/' + routeName)(app, models);
                                  ^
TypeError: object is not a function
    at /home/pcassiano/socialnet/app.js:60:35
    at Array.forEach (native)
    at Object.<anonymous> (/home/pcassiano/socialnet/app.js:57:26)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

本のリポジトリから最新のコードを実行しています。

このサンプル アプリを正しく実行するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

8

関数をエクスポートしない.jsファイルがディレクトリにある可能性があります。routes

app.jsディレクトリrequire内のすべてのファイルを呼び出してから、それらを関数として呼び出しています。routesしたがって、これらのファイルのいずれかが以下の一般的なパターンに従っていない場合、表示されているエラーが発生します。

module.exports = function(app, models) {
  // Add this file's routes using app.get, etc. calls.
  ...
};
于 2013-02-02T17:28:03.043 に答える
1

require('./routes/' + routeName)このエラーは、 の値が関数ではないことを報告しています。したがって、問題の本当の考えられる原因は 1 つだけです。

'./routes/'+routeName存在しない場合、ノードは (少なくとも v0.8.16 では) エラーをスローする必要があるため、そうではありません。したがって、最も明白なのは、ロードされているモジュールが関数をエクスポートしていないことです (エラーが示唆するように)。

console.log('routeName: ', routeName)app.js の 60 行目にある require ステートメントの直前に実行し、もう一度実行してみてください。次に、 の値を見つけrouteNameたら、開こうとしているファイルを調べます。オッズはmodule.exports、オブジェクト (または配列、文字列など) をエクスポートしているか、まったく設定されていないかのいずれかです。

ルート フォルダーにルートを追加する場合は、作成者と同じエクスポート スタイルに従うように注意してください。つまり、module.exports = function(app, models) {...}

于 2013-02-08T23:05:22.650 に答える