节点应用程序变量传递到stylus文件

时间:2012-09-24 22:38:12

标签: node.js express stylus

我正在构建一个小节点应用程序并使用Express with Jade和Stylus来呈现一些基本的HTMl页面。

我很好奇是否有办法让我将一些变量传递给从Node生成的.styl文件?我很清楚我可以在.styl文件中定义变量,但我需要更加动态。具体来说,我正在寻找一种简单的方法来存储数据库中的一些颜色,让节点获取这些值,然后将它们插入到.styl文件中,以便在页面呈现时传递这些变量。看起来应该这样做但是我缺乏细节。任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:6)

您可以使用Stylus API的define()函数来设置Stylus变量并使JS函数可用。

答案 1 :(得分:6)

感谢@ebohlman,因为他的建议与我最终实施的建议非常接近。

基本上我试图弄清楚如何在Connect Middleware之上做到这一点,这就是我想出的:

在做app.configure时我使用了自定义编译编译功能(键'compile'),如下所示:

app.use(require('stylus')
  .middleware({
    src: app.root + '/app/public',
    compile: compile
  })
);

然后我创建了几个函数:

var stylus = require('stylus');
var mylib = function(style){
  style.define('themeColor1', function(){
    //call to the db that returns a color
    color = 'blue';
    color = color ? color : 'orange';
    return new stylus.nodes.Literal(color);
  });
};

var compile = function(str, path) {    
  return stylus(str)
    .use(mylib);
};

然后在.styl文件中我做:

background-color themeColor1();

themeColor1函数中的三元运算符允许简单的默认值和覆盖。根据示例我花了一些时间来弄清楚API,但似乎这可能是其他人想要知道如何做的解决方案。如果有人对此方法有任何挫折,请告诉我。