在没有模板引擎的客户端 HTML\JS 脚本中嵌入服务器标签
Embed server tags inside client side HTML\JS scripts without template engines
我想在客户端 java 脚本中使用节点和 express
托管的文件执行以下操作
var rootURL = <%= "someurlfromserverconfig" %>;
我只是从我的节点应用程序托管一个 Web 目录。我不需要模板引擎。我只想访问一些简单的服务器属性,例如 API URL。 ASP 和 PHP 具有相似的特征。
简单的事情用toString
和replace
很容易处理:
var url = 'example.com'
app.get('/', function(req, res, next) {
fs.readFile('index.html', function(err, data) {
if (err) return res.sendStatus(500)
res.set('Content-Type', 'text/html')
res.send(data.toString().replace('<%= "someurlfromserverconfig" %>', '"' + url + '"'))
})
})
这将产生:var rootUrl = "example.com";
出于缓存目的,您可能希望事先将文件读入内存并 运行 您的 replace
而不是每次请求时,但这是您的选择。
详细说明工作流程; fs.readFile
returns 一个 Buffer
你可以 运行 toString()
然后允许你 运行 replace()
.
如果您不想在每次请求时都处理模板,并且如果您要包含的数据不会即时更改,您可以考虑 ES6 template strings。您可以将您的代码存放在这样的文件中:
'use strict';
const config = require('./server-config');
module.exports = `
var rootURL = "${config.rootURL}";
// ...
`;
然后您将需要处理路由的任何文件中的文件。模板只会被处理一次,即使它被多个文件所需要。
或者,您可以只使用轻量级模板引擎,渲染一次,然后在需要时提供。如果你想完全使用那种格式,我会推荐 EJS.
'use strict';
const ejs = require('ejs');
const config = require('./server-config');
let template = fs.readFileSync('./some-template.js', 'utf8');
let rendered = ejs.render(template, config);
app.get('/', (req, res) => {
res.send(rendered);
});
如果您发送的数据不断变化,您将不得不每次都渲染模板。甚至 ASP 和 PHP 也必须在后台执行此操作。
我想在客户端 java 脚本中使用节点和 express
托管的文件执行以下操作var rootURL = <%= "someurlfromserverconfig" %>;
我只是从我的节点应用程序托管一个 Web 目录。我不需要模板引擎。我只想访问一些简单的服务器属性,例如 API URL。 ASP 和 PHP 具有相似的特征。
简单的事情用toString
和replace
很容易处理:
var url = 'example.com'
app.get('/', function(req, res, next) {
fs.readFile('index.html', function(err, data) {
if (err) return res.sendStatus(500)
res.set('Content-Type', 'text/html')
res.send(data.toString().replace('<%= "someurlfromserverconfig" %>', '"' + url + '"'))
})
})
这将产生:var rootUrl = "example.com";
出于缓存目的,您可能希望事先将文件读入内存并 运行 您的 replace
而不是每次请求时,但这是您的选择。
详细说明工作流程; fs.readFile
returns 一个 Buffer
你可以 运行 toString()
然后允许你 运行 replace()
.
如果您不想在每次请求时都处理模板,并且如果您要包含的数据不会即时更改,您可以考虑 ES6 template strings。您可以将您的代码存放在这样的文件中:
'use strict';
const config = require('./server-config');
module.exports = `
var rootURL = "${config.rootURL}";
// ...
`;
然后您将需要处理路由的任何文件中的文件。模板只会被处理一次,即使它被多个文件所需要。
或者,您可以只使用轻量级模板引擎,渲染一次,然后在需要时提供。如果你想完全使用那种格式,我会推荐 EJS.
'use strict';
const ejs = require('ejs');
const config = require('./server-config');
let template = fs.readFileSync('./some-template.js', 'utf8');
let rendered = ejs.render(template, config);
app.get('/', (req, res) => {
res.send(rendered);
});
如果您发送的数据不断变化,您将不得不每次都渲染模板。甚至 ASP 和 PHP 也必须在后台执行此操作。