当前位置:网站首页>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), {}))
边栏推荐
- Conditionally [jsonignore]
- In Net 6 CS more concise method
- C form application of C (27)
- Développement d'un module d'élimination des bavardages à clé basé sur la FPGA
- [Zhao Yuqiang] deploy kubernetes cluster with binary package
- C mouse event and keyboard event of C (XXVIII)
- 自动化测试的好处
- Chinese brand hybrid technology: there is no best technical route, only better products
- Introduction to data types in MySQL
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
猜你喜欢

C#(二十七)之C#窗体应用

Execution order of scripts bound to game objects

Scalpel like analysis of JVM -- this article takes you to peek into the secrets of JVM

Ks008 SSM based press release system

About some basic DP -- those things about coins (the basic introduction of DP)

Proof of Stirling formula

Database, relational database and NoSQL non relational database

MySQL about self growth
![P7735-[noi2021] heavy and heavy edges [tree chain dissection, line segment tree]](/img/b1/dbfc42d66548476300501dd839abef.jpg)
P7735-[noi2021] heavy and heavy edges [tree chain dissection, line segment tree]

Record the pit of NETCORE's memory surge
随机推荐
【按键消抖】基于FPGA的按键消抖模块开发
How to standardize the deployment of automated testing?
[Key shake elimination] development of key shake elimination module based on FPGA
Global and Chinese markets for patent hole oval devices 2022-2028: Research Report on technology, participants, trends, market size and share
WPF效果第一百九十一篇之框选ListBox
Plus d'un milliard d'utilisateurs de grandes entreprises comme Facebook ont été compromis, il est temps de se concentrer sur le did
KS003基于JSP和Servlet实现的商城系统
Record the pit of NETCORE's memory surge
MLAPI系列 - 04 - 网络变量和网络序列化【网络同步】
User datagram protocol UDP
使用JS完成一个LRU缓存
Conditionally [jsonignore]
关于进程、线程、协程、同步、异步、阻塞、非阻塞、并发、并行、串行的理解
【leetcode】1189. Maximum number of "balloons"
MySQL reads missing data from a table in a continuous period of time
C (XXIX) C listbox CheckedListBox Imagelist
Error 1045 (28000): access denied for user 'root' @ 'localhost' (using password: no/yes
Global and Chinese markets for MRI safe implants 2022-2028: technology, participants, trends, market size and share Research Report
How does technology have the ability to solve problems perfectly
Practical development of member management applet 06 introduction to life cycle function and user-defined method