繁体   English   中英

在节点js中使用res.render()而不是res.send()

[英]use res.render() instead of res.send() in node js

我已经为ckeditor编写了图像上传器。 每次上传文件时,必须将包含图像名称的html文件发送回客户端。

这是我的代码:

router.post('/upload', function (req, res, next) {
var imageName = req.files.upload.name;

var html = "<script type='text/javascript'>" +
            "var funcNum = " + req.query.CKEditorFuncNum + "; " +
            "var url = \"/images/" + imageName + "\";" +
            "window.parent.CKEDITOR.tools.callFunction(funcNum, url);" +
            "</script>";

res.send(html);
});

这是一个非常脏的解决方案,因此我创建了以下.hjs文件并相应地映射了值:

<script type='text/javascript'>
  var funcNum = {{funcNum}};
  var url = "/images/" + {{imageName}};
  window.parent.CKEDITOR.tools.callFunction(funcNum, url);
</script>

而我的服务器端:

router.post('/upload', function (req, res, next) {
  var imageName = req.files.upload.name;
  res.render('ckeditor-response', {funcNum: req.query.CKEditorFuncNum, imageName: imageName});
});

这会生成与上面硬编码解决方案完全相同的html文件,但它不适用于ckeditor。 这两种解决方案之间有什么显着差异吗?

你确定[...]This generates exactly the same html file[...] 您应该始终检查最终结果,例如在browsers developer-tools的网络选项卡中。

如果imageNametest.jpg第一个代码会创建

var url = "/images/test.jpg";

但是你的hjs会创建:

 var url = "/images/" + test.jpg;

这是一个语法错误。 您正在寻找"/images/{{imageName}}";

除此之外,您应该以这样的方式编写响应:

<script type='text/javascript'>
(function() {
   var funcNum = {{funcNum}};
   var url = "/images/{{imageName}}";
   window.parent.CKEDITOR.tools.callFunction(funcNum, url);
}());
</script>

要么

<script type='text/javascript'>
window.parent.CKEDITOR.tools.callFunction({{funcNum}}, "/images/{{imageName}}");
</script>

否则,您将使用funcNumurl 污染编辑器窗口的全局命名空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM