昨天我有一个生成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')));
但我现在想拒绝公开访问。
答案 0 :(得分:0)
在您的服务器上,实际上是否需要使用较少的中间件?
我解决了这个问题,请将其添加到我的部署shell脚本中:
curl http://localhost:3000/stylesheets/style.css > /dev/null
通过直接向节点进程请求css文件来强制重新编译。