【问题标题】:MongoDB, Node, Express, EJS - Pass a array/variable from backend to frontend (from route to client)MongoDB、Node、Express、EJS - 将数组/变量从后端传递到前端(从路由到客户端)
【发布时间】:2018-12-18 10:35:00
【问题描述】:

我一直在尝试找出一种更好的方法将变量从后端推送到前端。现在我做这样的事情。

我有一个 MVC 模式,所以在到达路线时

app.get('/fil', middleWare.isLoggedIn, user.fil)

... 槽节点对数据库进行一些查询,并传递数据。

exports.fil = async (req, res) => {

    try {

        faktura = await Lan.find().populate('client', 'namn kundnr')

        res.status(200).render('pages/createInvoice', {
            faktura: faktura
        });

    } catch (err) {
        return res.status(500).send({
            message: err.message || "Some error occurred while retrieving datas."
        });
    };
};

...它在 EJS(我喜欢 EJS)的帮助下生成页面,然后将其传递给客户端/用户。

在提供给客户端/用户的 .ejs 文件中,我添加以下内容

<script>
    var fakturor = <%- JSON.stringify(faktura) %>;
</script>

这意味着我用完了变量并与 JS 一起使用它。

这就是我的问题出现的地方。这是一个好方法还是有其他方法来处理它?

我想一个想法是让用户直接从页面查询数据库,但在我的情况下,我相信用户这样做实际上并不会更好(用户将收到 100 条不同的行他们将能够过滤然后下载文件)

但是如果没有脚本标签,我还有其他方法可以做到这一点吗?就像我说的,我猜可以使用来自 JS/客户端的 ajax 调用,但你能用其他方式吗? EJS可以用其他方式吗?

【问题讨论】:

  • 使用 response.json 并发送一个包含您要发送的有效负载的 Json 对象
  • @INDRESHKHANDELWAL,想详细说明一下吗? response.json?
  • response.json() 接受一个 json 对象并向其发送请求的 http 请求。因此,如果您想发送一个变量 x,那么可以通过这种方式完成 => response.json( {x: 值})
  • 嗯。我会检查一下。感谢您的信息。你碰巧没有一个很好的链接让我可以阅读它?

标签: node.js mongodb express ejs


【解决方案1】:

ejs主要用于静态页面,如果你想构建一个动态页面,我会寻找像angular和react这样的单页面应用程序框架。 如果您仍想使用 ejs,您可以使用对服务器的 ajax 调用从数据库加载变量。 我永远不会直接从前端查询到数据库,因为那样你就无法控制服务器的安全性,总是通过 BE。

  • 也试着想想如果你真的需要一个变量在前端,你能不能只用渲染来解决你的问题?

【讨论】:

  • 我对构建 SPA:s 并不真正感兴趣,因为我认为这对于我的小型项目来说太过分了。不过我可能是错的。到目前为止,我已经收集到了通过 BE 进行 ajax-call 的想法,我想我会检查一下。问题是,我传递了数组,然后用户可以对其进行一些更改,然后将其“保存”为数组。然后将其保存到 DB,但也会复制数组 > xml,如果用户想要 dload 文件,则会收到提示。如果没有从 BE 传递的数组,我不确定如何解决用户可以更改内容的部分。
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
相关资源
最近更新 更多