【问题标题】:Node.js: Returning proper JSON from mongoose queryNode.js:从猫鼬查询返回正确的 JSON
【发布时间】:2016-07-27 01:40:58
【问题描述】:

我有这个以 mongoDB 作为数据库和把手作为我的服务器端模板引擎的快速应用程序。我没有在我的应用程序中使用 AngularJS 或 Ajax。

在其中一个路由中,我必须渲染页面并从数据库中发送一个 json 文件。但是,我无法做到这一点。

这是我的路线的代码 sn-p:

router.get('/disks', function(req, res, next) {
  places.find({"category": "disks"}, function(err, disks){
      if(err){
        throw err;
      }

       res.render('disks', 
        { 
          'risime': JSON.stringify(disks)
        });
      console.log(disks); // PROPERLY LOGS TO THE CONSOLE
  });
});

在hbs中,我正在尝试捕获它,但我什至不认为它是JSON。

这是它在客户端的登录方式:

[{"_id":"5704630a7d4cd367f8dsdce7","name":"Seagate",:"This awesome Hard disk",","categories":["SDD","256GB"]}]

问题是什么,我该如何解决?

【问题讨论】:

    标签: javascript json node.js mongodb mongoose


    【解决方案1】:

    “html 转义”你的字符串是把手(这是你通常想要的)。

    如果您不想这样,可以使用“triple-stash”表示法,如下所示:

    {{{risime}}}
    

    你可以在这里阅读:http://handlebarsjs.com/#html-escaping

    【讨论】:

    • 嗯,忽略 HTML 转义字符有什么坏处?
    • 安全。如果字符串来自不受信任的来源(例如用户输入),则该字符串可能是不安全的并且没有任何转义,它很容易包含 html 标签(如<script>)。这可以用来攻击网站,例如 XSS 漏洞。
    • 哦,好的。但是这个字符串来自数据库,所以如果我转义 HTML 没有问题吗?
    • 这取决于字符串如何进入数据库;)
    【解决方案2】:

    我认为你需要在渲染之前添加这个:

    res.type('application/json');
    

    客户端会知道这是一个 JSON,而不是 HTML 或纯文本,它会正确显示。

    希望我的回答对你有所帮助。

    【讨论】:

    • 嗯,不过我也在用 res.render() 这个不受影响吗?
    • 我试过了,这不适用于 res.render()。它只是将我的页面显示为纯文本而不是网页。
    猜你喜欢
    • 2018-03-07
    • 2018-05-26
    • 2019-09-29
    • 2023-03-21
    • 1970-01-01
    • 2015-08-05
    • 2015-01-04
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多