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

标签 javascript regex node.js coffeescript

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

相关文章:

用于验证字母数字字符、所有国际字符(日语、中文、俄语等)的 JavaScript 正则表达式

java - 查找正则表达式的哪一部分导致了匹配

javascript - 等待客户端 Javascript 通过 Axios GET 请求加载

javascript - 如何转换日期时间以下格式?

javascript - 检查是否有假

javascript - Bootstrap 2.3.2 中缺少字形图标

javascript - 如何将包含日语字符的字符串有条件地放入Javascript中的单独数组中

javascript - Java 8 Nashorn 空白问题

r - 提取字符串中的第一句话

node.js - 如何编译 JSX 服务器端