2016-05-10 5 views
2

のために同じデータを使用して、私は、スキーマモジュールとして次のコードを持っている:ジェイドにJSONを渡すと、APIアクセス

router.get('/', function(req, res) { 
    Module.find(function (err, modules) { 
     if (!err) { 
      return res.json(modules); 
     } else { 
      res.statusCode = 500; 

      log.error('Internal error(%d): %s', res.statusCode, err.message); 

      return res.json({ 
       error: 'Server error' 
      }); 
     } 
    }); 
}); 

そして、これは私のAPIのために正常に動作しますが、私はまた、このデータを使用しようとしているがそれを私のJadeテンプレートにロードする。

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

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

app.use('/api/modules', modules); 

これはうまくいきませんが、それが存在しないかのように(ログに記録されている場合)私には未定義です。

私は次のように私のルータを変更する場合:

res.render('index', { 
    modules: modules 
}) 

私のAPIを介してアクセスするときには、データを取得するための罰金ではなく動作します。

私の質問では、この特定のコードをAPIに使用して、それをJadeテンプレートにレンダリングする方法を教えてください。

答えて

1

ミドルウェアとしてのモジュールの使用が正しくありません。すなわち

app.use('/api/modules', modules); 

http://expressjs.com/en/guide/using-middleware.htmlで指定されているように、あなたのミドルウェアは、次の()関数を呼び出す必要があります。

app.use(function (req, res, next) { 
    console.log('Time:', Date.now()); 
    next(); 
}); 

これを解決するには、インデックスルートに似たルートを定義する必要がありますが、res.sendを使用します。

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

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

app.get('/api/modules', function(req, res) { 
    res.send({ modules: modules }) 
}); 
+0

次はなぜ使用しますか? 2つの別々のメソッドを持つのとは対照的に、res.sendの両方の作業を使用していますか? – DennisTurn

+0

res.sendはres.renderとは異なります。私はコードを更新しました。 – Vivasaayi

関連する問題