我想在使用node和express
托管的文件的客户端java脚本中执行以下操作var rootURL = <%= "someurlfromserverconfig" %>;
我只是从我的节点应用程序托管一个Web目录。我不需要模板引擎。我只想访问一些简单的服务器属性,例如API URL。 ASP和PHP有类似的功能。
答案 0 :(得分:1)
使用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
会返回Buffer
您可以toString()
运行的replace()
,然后您就可以{{1}}运行。{/ p>
答案 1 :(得分:1)
如果您打算不必在每个请求上处理模板,并且您想要包含的数据不会随时更改,您可以考虑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都必须在幕后做这件事。