下面是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/