我有一个在NodeJS
和ExpressJS
上运行的网络服务器。作为模板引擎,我正在使用EJS
。
我在数据库中存储帖子,其中一些包含html标签,例如 。在帖子上传到数据库之前;它们是 trim()和 escape() -ed。还会删除不需要的标签。
问题是,当我从db获取帖子时,通过expressjs render('template', {options:__, x: _, y: _})
方法将其发送给客户端时,html并未按预期显示。它以纯文本形式显示,如下所示:<b>test</b>
而不是 test 。
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);
}
});
<div class="postBody">
<%= decodeURIComponent(posts[i].content) %>
</div>
答案 0 :(得分:2)
我认为这是印刷版与评估版的比较。尝试将您的ejs切换为此。
<div class="postBody">
<%- decodeURIComponent(posts[i].content) %>
</div>