【问题标题】:How to wrap node express output so that it can be included as javascript?如何包装节点快递输出,以便它可以作为javascript包含在内?
【发布时间】:2018-02-15 14:27:49
【问题描述】:

尝试修改 node.js express 以将标准输出包装在 javascript 中(利用 document.write),以便我可以将其包含到其他 HTML 文件中。我想在 express 级别对输出进行编码并在客户端对其进行解码。

编辑:我想创建一个标准节点应用程序来生成 HTML 输出,但在使用 javascript 发送之前将其包装起来。这样我就可以继续使用快速车把和其他附加组件,而不会影响输出。

如果这已经是节点中的一个东西,请指向我如何实现它的文档?否则,我正在寻找在哪里更改 express 中的代码以包装每个输出。

为了清楚起见;要回答,请包含正确的 express 文件的引用,并从现有代码开始,以生成实现我目标的修改版本。

我正在查看的 Express 版本是 4.15.4。我查看了代码并找到了 index.js 和 route.js 文件 (https://github.com/expressjs/express/tree/master/lib/router),但我理解的不够深入,不知道在哪里修改代码。

示例

我最初的目标是让我的节点应用程序返回封装在类似于以下代码中的编码 HTML:

var str = "<encoded content goes here>";
document.write(decodeURI(str));

从 HTML 调用我的节点的示例方法:

<script src='http://localhost:3000/'></script>

如果您有任何意见,请随时评论该方法。

谢谢!

【问题讨论】:

  • 您只需在您的 get 处理程序中返回它......例如......app.get('/', function (req, res) { res.end("&lt;encoded content goes here&gt;"); })
  • 所以我可能会感到困惑,因为我也在使用快速车把。 router.get('/js', function(req, res){ var str = "
    这是一个测试
    "; res.render('jsinclude', { content: str, layout: false} ); });
  • @keith 虽然这可行,但我意识到我想做的是生成一个标准节点应用程序,它返回 HTML,但最后用这个 javascript 包装它。我会更新问题。

标签: javascript html node.js express include


【解决方案1】:

我想我解决了。

在文件https://github.com/expressjs/express/blob/master/lib/response.js@第116行我添加了以下代码:

  chunk = "str = \""+encodeURI(body)+"\";\ndocument.write(decodeURI(str));\n";

似乎奏效了。

所以:

res.send = function send(body) {
  var chunk = body;
  var encoding;
  var len;
  var req = this.req;
  var type;

  // settings
  var app = this.app;
<added my code here>
  // allow status / body

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多