2013-05-13 2 views
15

पीपोड नोडजेस वीडियो के माध्यम से जाकर और वर्तमान एक्सप्रेस/नोड संस्करणों पर ऐप को दोबारा बनाने के लिए मैंने एक छोटी सी समस्या में भाग लिया है।आप एक एक्सप्रेस ऐप में जेड आधारित विकल्प कैसे सेट करते हैं? ("पूर्ण" पथ का उपयोग "पूर्ण" पथों के साथ "विस्तार" करने के लिए आवश्यक है)

फ़ाइल संरचना

site 
- apps 
- - authentication 
- - - views 
- - - - login.jade 
- - - routes.js 
- node_modules 
- public 
- - images 
- - javascripts 
- - stylesheets 
- routes 
- views 
app.js 

login.jade:

extends /views/layout 
block content 
    form(action='/sessions', method='post') 
    label 
     | Username 
     input(type='text', name='user') 
    label 
     | Password 
     input(type='password', name='password') 
    input(type='submit', name='submit') 

app.js

var express = require('express') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path'); 

var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.set('view options', { basedir: process.env.__dirname}) 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

require('./apps/authentication/routes')(app) 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

जब मैं localhost:3000/login मैं निम्न त्रुटि प्राप्त करने के लिए नेविगेट:

Error: /Users/bob/code/site/apps/authentication/views/login.jade:1 
    > 1| extends /views/layout 
    2| block content 
    3| form(action='/sessions', method='post') 
    4| label 

the "basedir" option is required to use "extends" with "absolute" paths 

मैं विस्तारित लाइन को अपडेट कर सकता हूं: विस्तारित करता है ../../../views/layout और इसे काम करता है, लेकिन मैं यह जानना चाहूंगा कि आधारर विकल्प कैसे सेट करें।

उत्तर

23

आप इस का उपयोग कर सकते हैं: नए एक्सप्रेस पद्धति का उपयोग करके

app.locals.basedir = '/your/base/directory'; 

या,

app.locals.basedir = path.join(__dirname, 'views'); 
+0

इसे जोड़ने और पुनरारंभ करने के बाद एक ही त्रुटि प्राप्त करें। – sclarson

+1

अजीब, जिसने मेरे लिए समस्या हल की ([email protected], [email protected])। इसे एक और तरीका यह करना चाहिए कि 'रेंडर' के साथ पैरामीटर के रूप में 'आधारित' को पास करना है: 'res.render ('templatename', {basedir: '/ your/base/directory', ...})'। मेरे लिए भी काम करता है ([न्यूनतम डेमो का सारांश] (https://gist.github.com/robertklep/5570115))। – robertklep

+0

कभी भी ठीक काम नहीं करता है। मैं एक गूढ़ धारणा बना रहा था कि process.env .__ dirname किसी कारण से ऐप में वर्तमान रूट निर्देशिका थी। अब मैं app.locals.basedir = process.env.PWD का उपयोग कर रहा हूं और यह बहुत अच्छा काम करता है। धन्यवाद! – sclarson

7

एक्सप्रेस में, आप है कि वहाँ पर ध्यान देंगे,

app.set('views', path.join(__dirname, 'views')); 

आप बस इस पंक्ति को तब में रख सकते हैं,

app.locals.basedir = app.get('views'); 

जो jade.js पर आधारित आधार बनाता है ताकि यह पूर्ण पथ को हल कर सके।

+0

'स्थानीय' का उपयोग किए बिना ऐसा करने का कोई तरीका? –

संबंधित मुद्दे