基于数据库条目的动态express.js路由,无需重启

时间:2020-06-17 14:31:57

标签: javascript node.js express keystonejs

我已经使用自定义Express实例构建了一个KeystoneJS v5 app来提供数据。 我的数据存储在Postgres数据库中,该数据库包含以下模型:

Settings

我已经根据slug属性建立了动态​​路由:

CREATE TABLE "Link" (
    id integer DEFAULT PRIMARY KEY,
    customer text,
    slug text
);

一切正常,但是每次在Link表中插入新的子弹时,我都必须重新启动节点服务器。 您知道如何避免这种情况吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

这可能不是完整的答案,但这是您所寻找的东西。

  1. 确保我们接受路线上的任何弹丸
  2. 我使用了异步函数来等待数据库的结果
  3. 呈现索引视图(如果找到了块),或者如果在表中未找到条目,则返回404

警告,我没有使用keystoneJS或此knexjs包,因此它可能不是100%正确的,但应该是我们要实现的目标的一个很好的例子。我假设knexjs如果没有找到结果,就拒绝了诺言,但是我不确定。

express.get(`/:slug`, async function (req, res) {
    try {
        const result = await knex('Link')
            .where({ slug: req.params.slug })
            .select('id');

        return res.render('index');
    } catch {
        return res.status(404).send({ message: "Not found" });
    }
});

如果您运行的是Node.js的旧版本,则为不带异步版本。

express.get(`/:slug`, function (req, res) {
    knex('Link')
        .where({ slug: req.params.slug })
        .select('id')
        .then((result) => {
            return res.render('index');
        })
        .catch(() => {
            return res.status(404).send({ message: "Not found" });
        });
});