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

Pri*_*eer 5 stylus node.js express

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

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

ebo*_*man 6

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


Pri*_*eer 6

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

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

当做app.configure我使用自定义编译编译函数(键'compile'),如下所示:

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

然后我创建了几个函数:

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);
};
Run Code Online (Sandbox Code Playgroud)

然后在.styl文件里面我做:

background-color themeColor1();
Run Code Online (Sandbox Code Playgroud)

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

  • 您知道如何在不创建函数的情况下将变量从节点传递到手写笔.我在这里看到了.define()的答案,但它似乎对我有用. (2认同)