2012-08-10 30 views
1

我已经在Express中设置了服务器端的LESS编译,并且它在翡翠中运行正常,而且不会减少布局。ExpressJS - 在我的布局上,我的编译错误更少

我的终端:

if(err) throw err; 
       ^
Error: ENOENT, open '/Users/lijung/Documents/Project/clubond/public/stylesheets/left_navigator.less' 

app.js:

/** 
* Module dependencies. 
*/ 

var express = require('express') 
    , path = require('path') 
    , club = require('./routes/club') 
    , less = require('less') 
    , fs = require('fs'); 

var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    var RedisStore = require('connect-redis')(express); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: "william", store: new RedisStore })); 
    app.use(express.logger()); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.set('view options', { layout: false }); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 


app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 
//index-in-layout 
app.get('/club/:id', club.chkExist, club.getDataById, site.clubPage); 

//compile less 
app.get("*.less", function(req, res) { 
    var path = __dirname + req.url; 
    fs.readFile(path, "utf8", function(err, data) { 
     if(err) throw err; 
     less.render(data, function(err, css) { 
    if (err) throw err; 
     res.header("Content-type", "text/css"); 
     res.send(css); 
    }); 
    }); 
}); 


app.listen(3000); 
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); 

我把我的布局在名为意见index_in_layout

!!! 5 
html 
head 
    title= title 
    script(src='/javascripts/jquery.min.js') 
    link(rel="stylesheet", href="/stylesheets/index.css") 
    link(rel="stylesheet",type='text/css', href="/public/stylesheets/left_navigator.less") 
    script(src='/javascripts/index_in.js') 
    block script 
body 

index.jade:

extends ./index_in_layout 

block script 

    script(src='/javascripts/new_club.js') 
    script(src='/javascripts/new_bond.js') 
    script(src='/javascripts/new_event.js') 
    script(src='/javascripts/popup.js') 
    script(src='/javascripts/list_clubs.js') 
    script(src='/javascripts/list_bonds.js') 
    script(src='/javascripts/list_events.js') 
    link(rel='stylesheet', type='text/css', href='/public/stylesheets/test.less') 


block body 

终端始终告诉我Error: ENOENTleft_navigator.less无法打开。我把test.less和navigator.less放在同一个目录下,这没有任何意义。

LESS在服务器端让我疯狂。请有人能帮助我。由于

+0

这是你在找什么? http://stackoverflow.com/questions/7681407/node-js-fs-stat-throws-enoent-the-operation-completed-successfully – 2012-08-10 06:27:32

+0

nope ..,我的节点可以成功运行,如果我不把LESS样式表链接在Jade布局。但是,如果我将LESS样式表链接放在我的Jade布局中,它就出现了'错误:ENOENT' – LiJung 2012-08-10 06:42:56

+0

如果将它从版面中删除,是否正确呈现'test.less',或者您是否得到相同的错误?另外,请确保您没有权限问题。 – ebohlman 2012-08-10 16:08:53

回答

1

除非我失去了一些东西,你真的不需要去通过这些英雄事迹得到更少的工作:-)一般来说你只需要一行添加到您的通话app.configure像这样:

app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    ... 
    app.use(express.compiler({ src: __dirname + '/public', enable: ['less'] })); 
    app.use(connect.static(__dirname + '/public')); 
    app.use(app.router); 
}); 

如果你这样做,你不需要* .less文件的特殊路由。您只需在您的公共文件夹中请求* .css,并且它会自动生成。我使用主/子布局与玉石和较少这里如果一个例子将有助于:

https://github.com/JustinBeckwith/ExpressStarter

编码快乐!

+0

我很感谢您的帮助!最后,我得到了一个解决方案。 :) – LiJung 2012-08-11 10:20:50

+0

它不适用于Express 4.x.x – Srathi00 2015-03-08 16:20:30