少中间件没有编译,得到404

13r*_*337 5 less node.js express

我有一个运行较少中间件的node.js服务器.根据我的理解,它在运行中编译并将css文件放在目标/同一(如果未指定)文件夹中.

我的问题是我在css文件的get请求上遇到404错误:

呃: GET http://webserver/public/less/blog-reset.css 404 (Not Found)

这是我正在使用的:

web.js

//requiring dependencies
var express = require("express");
var logfmt = require("logfmt");
var lessMiddleware = require('less-middleware');
var hogan = require('hogan-express');
var path = require('path');

//all environments
var app = module.exports = express();
var port = Number(process.env.PORT || 5000);

app.use(logfmt.requestLogger());
app.use(lessMiddleware(path.join(__dirname,'public')));
app.use(express.static(path.join(__dirname,'public')));
app.set('layout',path.join(__dirname,'src','views','blog-layout'));
app.enable('view cache');
app.engine('.html',hogan);

//page routing called after env loads
require('./src/router');

//listening port
app.listen(port, function() {
  console.log("Listening on " + port);
});
Run Code Online (Sandbox Code Playgroud)

博客-的layout.html

<head>
        <title>EpiBlog</title>
        <link href='/public/less/blog-reset.css' rel='stylesheet' type='text/css'/>
</head>
<body>
        {{{yield}}}
</body>
Run Code Online (Sandbox Code Playgroud)

目录布局

ROOT
   public
      less
   src
   web.js
Run Code Online (Sandbox Code Playgroud)

版本

  • less-middleware v0.2.1-beta
  • 表达v4.0.0

我尝试过的:

  • 使用app.use(lessMiddleware)({ src: __dirname + '/public' }));(显然是旧的做法)
  • 运用 app.use(lessMiddleware(path.join(__dirname,'public','less')));
  • 移动app.use(express.static(path.join(__dirname,'public')));从web.js到router.js
  • 玩弄不同的路径
  • 将router.js的内容移动到web.js
  • 使用指定目的地

这个:

app.use(lessMiddleware(path.join(__dirname, 'source', 'less'), {
  dest: path.join(__dirname, 'public')
}));
Run Code Online (Sandbox Code Playgroud)

13r*_*337 4

问题是:

<link href='/public/less/blog-reset.css' rel='stylesheet' type='text/css'/>
Run Code Online (Sandbox Code Playgroud)

本来应该:

<link href='/less/blog-reset.css' rel='stylesheet' type='text/css'/>
Run Code Online (Sandbox Code Playgroud)

我读到:

link(rel='stylesheet', type='text/css', href='css/styles.css')
Run Code Online (Sandbox Code Playgroud)

与目录结构配对:

myapp
+-public
  +-css
    +-styles.less
Run Code Online (Sandbox Code Playgroud)

这让我相信这个电话:

app.use(express.static(path.join(__dirname,'public')));
Run Code Online (Sandbox Code Playgroud)

使请求假设/public/是父级,所以我是多余的调用/public/less/blog-reset.css

在这里找到了参考:express.js less编译器:无法工作