2013-02-26 2 views

답변

2

예. 당신은 로딩 시간에 실행되도록하는 기능을 구축 할 수 있습니다 (즉, 표현의 app 선언에서) 모든 템플릿을 컴파일하고 메모리에 남겨 둘 것이다 :

/** 
* @param {Object} app 
* 
* @api  private 
* 
* @summary Compiles the partial dashboard templates into memory 
*   enabling the admin controller to send partial HTMLs 
*/ 
function compileJadeTemplates (app) { 
    var templatesDir = path.resolve(
    app.get('views') 
    , 'partials' 
    ); 

    var templateFiles 
    , fn 
    , compiledTemplates = {}; 

    try { 
    templateFiles = fs.readdirSync(templatesDir); 
    for (var i in templateFiles) { 
     fn = jade.compile(
      fs.readFileSync(path.resolve(templatesDir, templateFiles[i]))); 
     compiledTemplates[templateFiles[i]] = fn; 
    } 
    app.set('dashboard-templates', compiledTemplates); 
    } catch (e) { 
    console.log('ERROR'); 
    console.log('---------------------------------------'); 
    console.log(e); 
    throw 'Error on reading dashboard partials directory!'; 
    } 

    return app; 
} 

:

예로 들어이 걸릴 expressJS 컨트롤러 기능이 방법으로 템플릿을 호출 :이 경우

/** 
* @param {String} req 
* @param {Object} res 
* @param {Object} next 
* 
* @api  public 
* 
* @url  GET  /admin/dashboard/user_new 
* 
* @summary Returns HTML via AJAX for user creation 
*/ 
controller.newUser = function (req, res, next) { 
    var compiledTemplates = app.get('dashboard-templates');  
    var html = compiledTemplates['_user_new.jade']({ csrf : req.session._csrf}); 
    return res.send({ status : 'OK', message : html}); 
} 

을, 나는 AJAX를 통해 html을 보내고있다; 응용 프로그램에 추가해야합니다. 그 일을 원하지 않는 경우. 다음 기능을 사용하여 html을 보낼 수 있습니다.

res.write(html); 
return res.end(); 
+0

예를 들어 주셔서 감사합니다. express.compile 미들웨어를 찾았습니다. app.use (express.compiler ({src : __dirname + '/ public', enable : [ 'less']})); app.use (express.static (__ dirname + '/ public')); 내 질문에 대한 답이 맞습니까? – Erik

관련 문제