2016-10-11 25 views
0

私はExpressのWebサーバを経由してのNode.jsから静的Webページを提供しています経由でのNode.js上で静的に務めページに動的なコンテンツを統合しますコンテンツ、例えばこのようなページにデータベースから取得されたアイテムのリスト? 私は実際に動的に作成し、サーバー上のpublicフォルダ内に存在index.htmlにロードされているサーバー上の「偽」の.jsファイルに可能性を参照してください。これは非常にハックようだと私最も簡単な方法は、Express

app.get('/myScript.js', (req, res) => { 
    data = getDataFromDatabase(); 
    res.send('var data1 = ' + data[0] + '; var data2 = ' + data[1]); 
}); 

これに対する最善の最小限のアプローチが何であるか疑問に思います。

+1

あなたは合理的なアプローチを求めていることを考えると、データが頻繁に変更されたり、制御されていない場合は、データが変更されたときにファイルを書き込むこともでき、動的である必要はありません。しかし、JSONはさまざまなテキストエスケープ問題に対処する必要がないので、データを返すことを検討する必要があります。 – bknights

+0

私があなたを正しく理解していれば、基本的にデータを取得してそのデータをメインページにレンダリングしたいのですか?そのような場合は、ejのようなビューエンジンを使用してみませんか? – n0m4d

+0

@ n0m4d私は、ビューエンジンなしの最小限のソリューションを探していましたが、実際にこれが行く方法かもしれないことがわかります。ありがとうございました。 – Sebastian

答えて

0

getルート内のコールバックから応答を返すこともできます。

エンドポイント:

router.get('/people', (req, res) => { 
    People.list((error, response) => { 
     if (error) return res.end(); 
     return res.send(response); 
    }); 
}); 

モデル:これにより

module.exports = { 
    connect: (callback) => { 
     r.connect({ 
      host: config.db.host, 
      port: config.db.port, 
      db: config.db.name 
     }) 
     .then((connection) => { 
      return callback(null, connection); 
     }) 
     .error((err) => { 
      return callback(err); 
     }); 
    }, 
    list: function (callback) { 
     this.connect((err, connection) => { 
      if (err) return callback(err); 
      r.db(config.db.name).table(config.db.tables.people) 
      .run(connection) 
      .then((cursor) => { 
       return cursor.toArray(); 
      }) 
      .then((users) => { 
       return callback(null, users); 
      }) 
      .error((err) => { 
       return callback(err); 
      }); 
     }); 
    }, 
    ... 

その後、私は私の画面に印刷された応答オブジェクトを取得し、私はこのような何かを行います。モデルコードはrethinkdbコードですが、使用しているコードで置き換えることができます。申し訳ありませんが、これはあなたが何をしていたかはかなりありませんでした。あなたのビルド=と運が良ければ)

+0

これは私の質問の例とは大きく異なることはありません。主な違いは、コールバックから 'res.send'を渡していることです。 – Sebastian

+0

あなたは正しいです。私はあなたの応答オブジェクトを返すためにコールバックでこれを処理する別の方法を示していました。 –

関連する問題