Redirect 如何将资产重定向到公众,使公众不可见,并使LessMiddle软件正常工作

Redirect 如何将资产重定向到公众,使公众不可见,并使LessMiddle软件正常工作,redirect,express,nginx,less,middleware,Redirect,Express,Nginx,Less,Middleware,昨天我有一个带有生成css的公共文件夹,还有一个带有更少css的源文件夹 root /public /css /source /less 还有一个像这样的中间件 module.exports = function (app, dir) { return lessMiddleware(path.join(dir, 'source', 'less'), { dest: path.join(dir), prepr

昨天我有一个带有生成css的公共文件夹,还有一个带有更少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, '');
            }
        }
    });
};
if (settings.debug) {
    app.use('/assets', express.static(path.join(__dirname, "public")));
}
它工作正常,除了根目录是打开的,我可以访问公共文件夹。所以,我把NGINX作为代理,没有问题,它拒绝访问根文件夹,并将“资产”重定向到“公共”

所以我有一个类似url的http://localhost/assets/css/main.css

今天,为了调试的目的,我想去掉nginx。所以我给静态访问资产文件夹,如下所示

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, '');
            }
        }
    });
};
if (settings.debug) {
    app.use('/assets', express.static(path.join(__dirname, "public")));
}
问题是较少的中间件停止工作,因为这段代码更改了中间件的路径

c:\node\myproject\source\less\assets\css\main.less
有没有一种方法可以使用express js标准静态中间件将“资产”重定向到“公共”上?还是用“/public”替换“/assets”并传递此请求的标准方法

我可以用应用程序来实现。获取。。。以及解析请求等等。我还可以更改中间件“preprocess”指令。但我希望尽可能少地使用代码

附言。 好的,现在我可以让资产工作了

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')));

但我想现在就拒绝访问public。

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

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

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

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

在生产环境中,最好在开始时重新编译css,但在开发模式中,每次更改设计和刷新页面时,我都会强制编译。我的意思是,我可以编写做同样事情的代码,或者编写shell脚本,但不想浪费时间,因为这个项目只是一种爱好。然后在开发模式下,不要使用nginx来服务样式表文件夹。是的,所有文件夹现在都在开发中打开。看起来,在一些人质身上,我无法使用nginx,这限制了廉价人质的数量。