2016-10-11 18 views
0

我從Node.js的通過快速的網絡服務器服務於靜態網頁整合到靜態頁面提供服務內容,例如從數據庫檢索到這樣的頁面的項目列表? 我看到了可能性,「假」,實際上是動態創建,然後駐留在public文件夾內的服務器上的index.html服務器上加載.js文件:最簡單的方式動態內容上的Node.js通過快遞

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

這似乎非常哈克和我想知道最好的簡約方法是什麼。

+1

鑑於你在問它一個合理的方法。如果數據不會經常變化或者在您的控制之下,那麼甚至可以在數據更改時寫入文件,而且根本不需要動態變化。不過,有一點需要考慮的是返回數據,因爲JSON將幫助您避免處理各種文本轉義問題。 – bknights

+0

如果我理解你是正確的,你基本上想要檢索數據並將數據呈現到主頁面中?如果是這樣的話,爲什麼不使用像ejs這樣的視圖引擎呢? – n0m4d

+0

@ n0m4d我正在尋找一個沒有視圖引擎的最小解決方案,但看到這可能確實是要走的路。謝謝。 – Sebastian

回答

0

您還可以從您的獲取路線中返回回調。我做這樣的事情:

端點:

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

你說得對。我只是展示了另一種方式來處理這個回調以獲取迴應對象。 –

相關問題