Node.js:如何在ECT模板中打印URL的一部分

下面是app.js. ECT文件是基于path加载的。

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通过编写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。 您作为parameter passing给createServer方法的callback函数是每次收到请求时都会调用的callback函数,因此您只能在第二个代码中获取该函数中的参数。

所以你应该能够做到以下几点:

 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); 

使用node.js URLparsing器,如: http : //nodejs.org/api/url.html

 var url = require('url'); var http = require('http'); http.createServer(function(req, res){ console.dir(url.parse(req.url)); });