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

10-11 12:56