0

ExpressJSで基本的なルーティングを試しているところですが、これまでのところ2つのルートがあります。

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

app.get('/pics', function(req,res) {
  res.render('pics');
});

このように定義すると、app.jsではすべて正常に機能しますが、以下のようにroutesサブディレクトリ内の個々のファイルからエクスポートすると、コールバック関数が必要であるというエラーメッセージが表示されますが、未定義のオブジェクトが返されました。

index.js:

exports.index = function(req,res) {
  res.render('index');
});

pics.js

exports.pics = function(req, res) {
  res.render('pics');
};

app.js

var routes = require('./routes');

app.get('/', routes.index);
app.get('/pics', routes.pics);

後者の例では、すべてを壊すために何が間違っていますか?

4

3 に答える 3

1

require('./routes')ロードするだけで、ロード./routes/index.jsしません./routes/pics.js。したがってroutes.pics、未定義になります。

于 2013-02-22T19:13:21.043 に答える
1

インデックスルートは機能していますが、index.jsからインポートしようとしているため、写真ルートは機能していません。

ルートディレクトリにはindex.jsがあります。これは、実行するrequire('./route')場合、実際に実行していることを意味しますrequire('./route/index')。これは、index.jsがNode.jsで特別な意味を持つために発生します。

したがって、写真を機能させるには、次のことを行う必要があります。

app.get('/pics', require('./routes/pics').pics);

これは本当に混乱を招く可能性があり、IRCチャネルでよく聞かれる質問です。

于 2013-02-22T19:14:46.160 に答える
0

require()はindex.jsを読み込もうとします。

これは、index.jsに貼り付ける(jsに変換する)ことができる小さなコーヒースクリプトスニペットです。現在のディレクトリにあるすべてのファイル(ルート)を自動ロードします。

index.coffee

module.exports = (app) =>
  require("fs").readdirSync(__dirname).forEach (file) ->
    i = file.lastIndexOf('.')
    ext = if (i < 0) then '' else file.substr(i)
    if (ext == ".js" or ext == ".coffee") and file != "index"+ext
      require("./" + file)(app)

app.js

require("./routes")(app)

someRoutes.js

app.get('/', function(req,res) {
  res.render('index');
});
于 2013-02-22T19:10:09.987 に答える