【问题标题】:simplest way to integrate dynamic content into statically served page on Node.JS via Express通过 Express 将动态内容集成到 Node.JS 上的静态服务页面的最简单方法
【发布时间】:2017-02-20 11:28:57
【问题描述】:

我正在通过 Express 网络服务器从 Node.JS 提供静态网页:

app.use('/', express.static('public'));

集成一些动态内容的最简约方式是什么,例如从数据库检索到这样一个页面的项目列表? 我看到有可能在服务器上“伪造”一个实际动态创建的 .js 文件,然后加载到位于服务器上 public 文件夹内的 index.html 中:

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

这看起来非常h​​acky,我想知道最好的简约方法是什么。

【问题讨论】:

  • 鉴于您正在询问其合理的方法。如果数据不经常更改或在您的控制之下,您甚至可以在数据更改时写入文件,并且它根本不需要是动态的。但是要考虑的一件事是将数据返回为 JSON 将帮助您避免处理各种文本转义问题。
  • 如果我理解正确,您基本上是想检索数据并将该数据呈现到您的主页中?如果是这样,为什么不使用像 ejs 这样的视图引擎呢?
  • @n0m4d 我一直在寻找没有视图引擎的最小解决方案,但看到这可能确实是要走的路。谢谢。

标签: javascript node.js express dynamic-content


【解决方案1】:

您还可以从 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 代码,但您可以用您正在使用的任何代码替换它。对不起,如果这不是你所追求的。祝你的构建好运 =)

【讨论】:

  • 我认为这与我的问题中的示例没有显着不同。主要区别在于您从回调传递res.send
  • 你是对的。我只是展示了另一种通过回调来处理此问题的方法,以取回您的响应对象。
猜你喜欢
  • 2011-11-06
  • 2010-10-30
  • 1970-01-01
  • 2016-07-12
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 2015-10-14
相关资源
最近更新 更多