来自数据库的HTML显示为纯文本

时间:2018-12-27 22:59:08

标签: node.js express

我有一个在NodeJSExpressJS上运行的网络服务器。作为模板引擎,我正在使用EJS
我在数据库中存储帖子,其中一些包含html标签,例如 。在帖子上传到数据库之前;它们是 trim() escape() -ed。还会删除不需要的标签。

问题是,当我从db获取帖子时,通过expressjs render('template', {options:__, x: _, y: _})方法将其发送给客户端时,html并未按预期显示。它以纯文本形式显示,如下所示:<b>test</b>而不是 test

Main.js(从db获取帖子的脚本)

const express = require('express');
const sql = require('sql');


module.exports = {
    runScript: function(callback){

        sql.prepareQuery('SELECT `posts`.*, `accounts`.`firstname`, `accounts`.`lastname`, `accounts`.`username` FROM `posts` LEFT JOIN `accounts` ON `posts`.`author_id`=`accounts`.`id` ORDER BY `posts`.`time` DESC LIMIT 20',
        {}, function(error, results){
            let variables = {
                posts:results
            }

            callback(variables);
        });

    }
}

主页路由器

router.get('/', function(req, res, next) {

    try {
        let pageCore = require(__dirname + "/backend/main.js");


        pageCore.runScript(function(obj){
            res.set({'Content-Type': 'text/html; charset=utf-8'});

            res.locals.posts = obj.posts;
            res.locals.timeParser = require('timeParser');

            res.render('index', {
                title:"Express",
                pageToDisplay: "main.ejs"
            });
        });


    } catch(e){
        console.log("WTF??", e);
        res.send(e);
    }
});

Main.EJS(html部分)

<div class="postBody">
    <%= decodeURIComponent(posts[i].content) %>
</div>

1 个答案:

答案 0 :(得分:2)

我认为这是印刷版与评估版的比较。尝试将您的ejs切换为此。

<div class="postBody">
    <%- decodeURIComponent(posts[i].content) %>
</div>