使用node/express/jade,如何服务两个javascript文件中的一个,取决于第一个是否存在



web应用程序开发新手。我的问题:我已经设置grunt缩小/丑化javascript。这很好,但我希望服务器:看看是否存在缩小的javascript。如果有,就端上来。如果没有,提供源javascript。

我现在有一个工作的实现,在路由中,检查被缩小的文件是否存在。如果有,它提供索引。玉,其中有布局。里面嵌着玉石。如果不是,它提供index_fallback。Jade,它有layout_fallback。里面嵌着翡翠

路由逻辑:

/* GET home page. */
router.get('/', function(req, res) {
  if(fs.existsSync(path.join(__dirname + '/../public/' + '/dist/javascripts/global.js'))) {
    res.render('index', { title: 'Express' });
  } else {
    console.log('WARNING!!! Did not find minified global.js file. Using full file.');
    console.log('Run `grunt` to construct minified .js files.');
    res.render('index_fallback', { title: 'Express' });
  }
});

是否有更优雅的方法来做到这一点?维护两倍多的文件,每个文件只有一行差异,这似乎不是一种明智的方法。我可以将变量传递给jade并在jade模板中执行条件吗?我应该在路由器中做任何逻辑吗?

源代码可在这里获得。非常感谢。

编辑:优雅地解决了。参见routes/index.js和views/layout。

我将缓存该文件的路径,而不是每次都检查它是否存在。或者文件的全部内容,除非RAM非常宝贵。然后,只需观察您希望显示首选文件的目录上的变化。

var fileName = "lessPreferredFile.js"
router.get('/file', function (req, res) {
    doStuffBasedOn(fileName);
}
fs.watch("directory/of/preferredFile", function (evt, name) {
    //If our file gets added, change the fileName to the updated file name
    //May also want to check the evt parameter for the correct event type.  
    //Wouldn't want to change fileName to the name of a file that just got deleted!
    if (name === "desiredFileName") fileName = name;
}

注意:我没有测试这个,认为它javascript伪代码,但它是相当接近。还有一些实用程序可以递归地监视目录等,如果你不能指望你正在寻找的文件被放置在特定的目录中。

相关内容

  • 没有找到相关文章