下面是 app.js。 ECT文件根据路径加载。
var http = require('http');
var ECT = require('ect');
var renderer = ECT({ root : __dirname + '/views' });
var data = {
title : 'Hello, world!',
size : 'XXL'
};
var product = renderer.render('product.ect', data);
var about = renderer.render('about.ect', data);
var anypath = renderer.render('anypath.ect', data);
var server = http.createServer(function(req, res) {
var params;
if(params = req.url.match(/^\/product\/(.+)$/)) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(product);
} else if(params = req.url.match(/^\/about\/(.+)$/)) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(about);
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(anypath);
}
}).listen(80);
不使用 ECT 文件,当浏览 product/255
时,我可以打印 You browse 255
写:
if(params = req.url.match(/^\/product\/(.+)$/)) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('You browse ' + params[1]);
}
但是如何将params[1]
作为data
的一部分呢?
也就是说,ECT模板中如何打印部分URL
最佳答案
在您知道任何请求信息之前,您正在渲染每个页面的 HTML。您作为参数传递给 createServer
方法的回调函数是每次收到请求时都会调用的回调函数,因此您将只能获取该函数内的参数,就像您在你的第二个代码。
因此您应该能够执行以下操作:
var http = require('http');
var url = require('url');
var ECT = require('ect');
var renderer = ECT({ root : __dirname + '/views' });
var server = http.createServer(function(req, res) {
// First element of path will be '', because the path begins with a /
var path = url.parse(req.url).path.split('/');
var html;
var data = {
title : 'Hello, world!',
size : 'XXL'
};
if('product' === path[1] && path[2]) {
data.title += ' You browse a product with the parameter ' + path[2];
html = renderer.render('product.ect', data);
} else if('about' === path[1] && path[2]) {
data.title += ' You browse at about page with the parameter ' + path[2];
html = renderer.render('about.ect', data);
} else {
data.title += ' You browse anything else :)';
html = renderer.render('anypath.ect', data);
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(html);
}).listen(80);
关于javascript - Node.js:如何在 ECT 模板中打印部分 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814713/