使用Express在响应中呈现原始HTML

45

我想知道如何在Express响应中呈现原始的HTML字符串。

我的问题与其他人不同,因为我不是试图呈现原始的HTML模板;相反,我只想呈现单个原始的HTML字符串。

以下是我在路由文件中尝试的内容。

router.get('/myRoute', function (req, res, next) {
  var someHTML = "<a href=\"foo\">bar</a>"
  res.send(someHTML);
});
但是,当我将浏览器指向该路由时,我看到的是一个超链接而不是原始的HTML字符串。我尝试通过res.setHeader('Content-Type', 'text');设置内容类型为文本,但没有效果。 有什么建议吗?
4个回答

69

对于其他来到这里的人,以下方法对我最有效:

res.set('Content-Type', 'text/html');
res.send(Buffer.from('<h2>Test String</h2>'));

编辑:

如果您的问题是转义特定字符,请尝试使用模板文字: 模板文字


3
您还可以使用res.setHeader('Content-Type', 'text/html'),不需要进行Buffer.from调用即可正常工作。 - MichaelM

0

做这件事的最佳方式是,假设您正在使用回调样式,请声明var output =“”....然后通过+=附加所需内容到输出变量中....如果是大字符串,请使用模板文字(新行不重要$ {在此处的变量} )...然后res.writeHead(200,{Content-Type:text / html); res.end(output)


谢谢Brian!最终我使用了res.writeHead(200,"{Content-Type:text/html}");res.end(output);。 - Jack Mason

0

-2

只需在它周围添加标签

someHTML = "<plaintext>" + someHTML + "</plaintext>";

提醒一下,纯文本已被视为过时,这意味着浏览器供应商没有义务实现它们。但是,在主要浏览器上仍然可以使用。

另一种方法是

someHTML = someHTML.replace(/</g, '&lt;').replace(/>/g, '&gt;');

使用第二种解决方案时,浏览器会直接打印出&lt;&gt;这两个符号,而不是对应的<>符号。我该怎么办? - mc9
“第二种解决方案”是我所有时间里最糟糕的编码反模式之一。本质上,它是一个劣质的 HTML 转义器,因为它只转义了 2 个 HTML 符号。如果你发现自己在做这样的事情,那么你可能是在错误地进行操作。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接