【发布时间】:2019-02-28 05:22:55
【问题描述】:
我创建了一个简单的博客站点,其中包含帖子、用户和 cmets。 我正在使用带有 EJS 视图的 MongoDB、NodeJS 和 Express。 我在尝试创建 cmets 部分时遇到了问题。 我想使用带有 Ajax 请求的 JQuery 来制作 cmets 部分 所以当用户发表评论或编辑时页面不会刷新。
为了获取每个帖子的 cmets,我构建了一个如下所示的 api 路由 - www.domain.com/api/messages/:post_id 此 url 返回包含该帖子的 cmets 的 JSON。 我不想暴露关于评论作者的“风险”数据,所以我用 Mongo 查询填充了结果。
现在解决问题 - 我想为每个评论添加编辑和删除按钮,这些按钮当然只显示给管理员和作者。 当我使用 EJS 时,它很简单——我写了这样的东西——
<% if (user !== null&& (JSON.stringify(user._id) === JSON.stringify(comments[i].author._id)
|| user.is_admin === true)) { %>
put the buttons here...
问题是,当我在我的主脚本文件上使用 JQuery 时,我无法访问用户(这是从后端 Nodejs 发送的对象)。 我不确定我是否应该从 EJS 将这个对象“发送”到我的 js 文件中,我认为这不安全,也不是正确的方式。
我也不能保留几行前引用的 EJS 代码,因为当 EJS 文件加载时,该页面上没有 cmets(XHR 请求获取它们,而 JQuery 将它们放在页面上)。 所以我真的不知道如何继续。
编辑 - 我想我有一个解决方案:也许我应该在 EJS 文件上创建一个 ID 数组,其中包含需要这些按钮的 cmets,然后我会以某种方式将该数组发送到 JS 文件?
谢谢!
【问题讨论】:
-
是的,您是对的,因为有人可以通过
user.is_admin = true将用户对象从ejs发送到客户端代码的不安全方式,所以您是对的。所以你可以做的是有一个包含ejs代码的隐藏div,并在你的cmets完成加载时显示这个div。 -
谢谢!我不认为我理解您的解决方案,评论是通过 xhr 请求获取的,那么我应该在 ejs 文件中隐藏什么?加载时页面上没有 cmets
-
我的意思是你可以隐藏你的按钮,直到 cmets 没有以 ejs 方式加载。
标签: javascript node.js mongodb express ejs