当前位置:网站首页>Explain in simple terms node template parsing error escape is not a function
Explain in simple terms node template parsing error escape is not a function
2022-07-06 04:08:00 【xzlAwin】
Explain profound theories in simple language node Template parsing error escape is not a function
operation
var escape = function (html) {
return String(html)
.replace(/&(?!\w+;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
}
var complie = function (str) {
console.log(str)
var tpl = str.replace(/<%=([\s\S]+?)%>/g, function (match, code) {
// escape
return "' + escape(" + code + ") + '"
}).replace(/<%-([\s\S]+?)%>/g, function (match, code) {
// Normal output
return "' + " + code + " + '"
}).replace(/<%([\s\S]+?)%>/g, function (match, code) {
return "';\n" + code + "\n tpl += '"
}).replace(/\'\n/g, '\'')
.replace(/\n\'/gm, '\'')
console.log('---------- Code replacement template ----------')
console.log(tpl)
tpl = "tpl = '" + tpl + "'"
tpl = tpl.replace(/''/g, '\'\\n\'')
tpl = ' var tpl = ""\n with (obj || {}) {\n ' + tpl + '\n }\n return tpl'
return new Function('obj', 'escape', tpl)
}
var render = function(complie, data) {
console.log('---------- Constructors ----------')
console.log(complie.toString())
console.log('---------- Operation function ----------')
return complie(data)
}
var tpl = [
'<% if (obj.user) { %>',
'<h2><%=user.name%></h2>',
'<% } else { %>',
'<h2> Anonymous users </h2>',
'<% } %>'].join('\n')
console.log('---------- Templates ----------')
console.log(tpl)
console.log(render(complie(tpl), {user: {name: 'Jackson Tian'}}))
//console.log('\n\n')
//console.log(render(complie(tpl), {}))
Abnormal information
TypeError: escape is not a function
at eval (eval at complie (F:\workspace\javascript workspace\plNode\prj8_5_4_2\src\template4.js:27:10), <anonymous>:7:21)
at render (F:\workspace\javascript workspace\plNode\prj8_5_4_2\src\template4.js:34:9)
at Object.<anonymous> (F:\workspace\javascript workspace\plNode\prj8_5_4_2\src\template4.js:49:13)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:12)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
at internal/main/run_main_module.js:17:47
The analysis reason
- escape It's not a function , because return new Function(‘obj’, ‘escape’, tpl) In the sentence ‘escape’ Is the function ,complie(data, escape) When calling, you need to pass escape function , Otherwise I can't find it escape function
resolvent
Method 1
- Invocation time , Pass on escape function
complie(data, escape)
Method 2
- Call yourself , Pass on escape function
complie.call(complie, data, escape)
# perhaps
complie.call(this, data, escape)
Complete code
var escape = function (html) {
return String(html)
.replace(/&(?!\w+;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
}
var complie = function (str) {
console.log(str)
var tpl = str.replace(/<%=([\s\S]+?)%>/g, function (match, code) {
// escape
return "' + escape(" + code + ") + '"
}).replace(/<%-([\s\S]+?)%>/g, function (match, code) {
// Normal output
return "' + " + code + " + '"
}).replace(/<%([\s\S]+?)%>/g, function (match, code) {
return "';\n" + code + "\n tpl += '"
}).replace(/\'\n/g, '\'')
.replace(/\n\'/gm, '\'')
console.log('---------- Code replacement template ----------')
console.log(tpl)
tpl = "tpl = '" + tpl + "'"
tpl = tpl.replace(/''/g, '\'\\n\'')
tpl = ' var tpl = ""\n with (obj || {}) {\n ' + tpl + '\n }\n return tpl'
return new Function('obj', 'escape', tpl)
}
var render = function(complie, data) {
console.log('---------- Constructors ----------')
console.log(complie.toString())
console.log('---------- Operation function ----------')
return complie(data, escape)
// Equivalent to
//return complie.call(this, data, escape)
}
var tpl = [
'<% if (obj.user) { %>',
'<h2><%=user.name%></h2>',
'<% } else { %>',
'<h2> Anonymous users </h2>',
'<% } %>'].join('\n')
console.log('---------- Templates ----------')
console.log(tpl)
console.log(render(complie(tpl), {user: {name: 'Jackson Tian'}}))
//console.log('\n\n')
//console.log(render(complie(tpl), {}))
边栏推荐
- Fundamentals of SQL database operation
- Esp32 (based on Arduino) connects the mqtt server of emqx to upload information and command control
- 2/11 matrix fast power +dp+ bisection
- 2/13 qaq~~ greed + binary prefix sum + number theory (find the greatest common factor of multiple numbers)
- Unity中几个重要类
- How to modify field constraints (type, default, null, etc.) in a table
- Facebook and other large companies have leaked more than one billion user data, and it is time to pay attention to did
- Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
- C#(二十九)之C#listBox checkedlistbox imagelist
- Chinese brand hybrid technology: there is no best technical route, only better products
猜你喜欢
Record the pit of NETCORE's memory surge
Ks008 SSM based press release system
Execution order of scripts bound to game objects
10个 Istio 流量管理 最常用的例子,你知道几个?
C#(二十七)之C#窗体应用
Lora gateway Ethernet transmission
[disassembly] a visual air fryer. By the way, analyze the internal circuit
In Net 6 CS more concise method
How does technology have the ability to solve problems perfectly
How many of the 10 most common examples of istio traffic management do you know?
随机推荐
10个 Istio 流量管理 最常用的例子,你知道几个?
Execution order of scripts bound to game objects
Facebook等大廠超十億用戶數據遭泄露,早該關注DID了
Basic use of MySQL (it is recommended to read and recite the content)
Codeforces Round #770 (Div. 2) B. Fortune Telling
C form application of C (27)
如何修改表中的字段约束条件(类型,default, null等)
Class A, B, C networks and subnet masks in IPv4
软考 系统架构设计师 简明教程 | 总目录
math_ Derivative function derivation of limit & differential & derivative & derivative / logarithmic function (derivative definition limit method) / derivative formula derivation of exponential functi
Hashcode and equals
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
Ybtoj coloring plan [tree chain dissection, segment tree, tarjan]
STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
Exchange bottles (graph theory + thinking)
C#(二十七)之C#窗体应用
Brief tutorial for soft exam system architecture designer | general catalog
Global and Chinese markets for MRI safe implants 2022-2028: technology, participants, trends, market size and share Research Report
《2022年中国银行业RPA供应商实力矩阵分析》研究报告正式启动
ESP32_ FreeRTOS_ Arduino_ 1_ Create task