如何将资产重定向到公共,使公共隐形,减少中间件工作

时间:2015-03-06 07:07:45

标签: redirect express nginx less middleware

昨天我有一个生成css的公共文件夹,以及一个少了

的源文件夹
root
    /public
        /css
    /source
        /less

和像这样的中间件

module.exports = function (app, dir) {
    return lessMiddleware(path.join(dir, 'source', 'less'), {
        dest: path.join(dir),
        preprocess: {
            path: function(pathname, req) {
                return pathname.replace('public' + path.sep + 'css' + path.sep, '');
            }
        }
    });
};

它工作正常,但root目录已打开,我可以访问公用文件夹。所以,我把一个NGINX作为代理,没有问题,它拒绝访问根文件夹并将'assets'重定向到'public'。

所以我的网址就像http://localhost/assets/css/main.css

今天我想摆脱nginx用于调试目的。所以我给像这样的资产文件夹静态访问

if (settings.debug) {
    app.use('/assets', express.static(path.join(__dirname, "public")));
}

问题是较少的中间件停止工作,因为此代码将中间件的路径更改为

c:\node\myproject\source\less\assets\css\main.less

有没有办法使用快速js标准静态中间件将“资产”重定向到“公共”?或者用'/ public'替换'/ assets'并将此请求传递出去的标准方法?

我可以使用app.get(...和解析请求等来做到这一点。我也可以改变中间件'预处理'指令。但我希望尽可能减少代码。

P.S。 好的,现在我可以让资产运作了

if (settings.debug) {
    app.use(function(req, res, next) {      
        if (req.url.indexOf('/assets/') === 0) {
            req.url = req.url.replace('/assets/', '/public/');
        }
        next();
    });
}

app.use(require('./config/lessMiddlewareConfig.js')(__dirname));
app.use('/public', express.static(path.join(__dirname, 'public')));

但我现在想拒绝公开访问。

1 个答案:

答案 0 :(得分:0)

在您的服务器上,实际上是否需要使用较少的中间件?

我解决了这个问题,请将其添加到我的部署shell脚本中:

curl http://localhost:3000/stylesheets/style.css > /dev/null

通过直接向节点进程请求css文件来强制重新编译。