使用Drogon中的CSP模板遇到的问题

前言

在移植一个页面到CSP模板后,在编译的时候,无法编译成功,没有具体的错误信息.
drogon中csp视图遇到的问题
编译器没有指出具体的错误在哪一行,不过抱着侥幸的心态去视图编译后的源码文件中看看是哪里的问题,还真有发现.

drogon中csp视图定位到问题在哪里
下面我们去看看这一段js代码:
let editConfig = [['viewSourceCode'],
            ['bold', 'underline', 'italic', 'foreColor', 'backgroundColor', 'strikethrough'],
            ['blockquote', 'fontFamily', 'fontSize', 'setHead', 'list', 'justify'],
            ['createLink', 'unLink', 'insertTable'],
            ['insertImage', 'insertCode'],
            ['undo', 'redo', 'insertOption', 'fullScreen']];

这一块代码,看着还没有问题,原先在Asp.Net Core也可以执行,但为什么在Drogon的CSP是有问题的呢?应该就出现在"[[",突然想起在CSP有一个语法是"[[auto x = 123;]]",不过还是先看看Drogon的文档.

  • 夹在标签[[]]之间的内容被认为是变量名字,view会以这个名字为keyword从控制器传过来的数据里找到对应的变量,并把它输出到页面的对应位置,变量名字前后的空格会被省略,[[]]不要分行写,同时,出于性能考虑,只支持三种字符串数据类型(const char *,std::string和const std::string,因为输出时涉及数据类型判断,过多类型会导致过多的条件语句),其他数据类型请用上面提到的方式输出(或者将需要输出的变量以string类型存入data中);

所以就能确定问题在哪里了,所以这一段代码,就要稍微调整一下.
let editConfig = [];
editConfig.push(['viewSourceCode']);
editConfig.push(['bold', 'underline', 'italic', 'foreColor', 'backgroundColor', 'strikethrough']);
editConfig.push(['blockquote', 'fontFamily', 'fontSize', 'setHead', 'list', 'justify']);
editConfig.push(['createLink', 'unLink', 'insertTable']);
editConfig.push(['insertImage', 'insertCode']);
editConfig.push(['undo', 'redo', 'insertOption', 'fullScreen']);

查看编译成功后的视图源码文件

drogon中CSP无法编译的问题,调整js代码

秋风 2023-02-19