Đi qua video peepcode nodejs và tạo lại ứng dụng trên các phiên bản hiện tại/nút hiện tại mà tôi đã gặp phải sự cố nhỏ.Làm thế nào để bạn thiết lập tùy chọn ngọc bích dựa trên một ứng dụng thể hiện? (tùy chọn "basedir" là bắt buộc để sử dụng "extends" với đường dẫn "tuyệt đối")
cấu trúc tập tin
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'));
});
Khi tôi hướng đến localhost:3000/login
tôi nhận được lỗi sau:
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
Tôi có thể cập nhật dòng mở rộng thành: mở rộng ../../../views/layout và làm cho nó hoạt động, nhưng tôi muốn biết cách đặt tùy chọn dựa.
Nhận lỗi tương tự sau khi thêm và khởi động lại. – sclarson
Lạ lùng, giải quyết được vấn đề cho tôi ([email protected], [email protected]). Một cách khác cần làm là chuyển 'basedir' thành tham số với' render': 'res.render ('templatename', {basedir: '/ your/base/directory', ...})'. Cũng làm việc cho tôi ([gist demo tối thiểu] (https://gist.github.com/robertklep/5570115)). – robertklep
Nevermind hoạt động tốt. Tôi đã thực hiện một giả định câm rằng process.env .__ dirname là thư mục gốc hiện tại trong ứng dụng bắt đầu vì một lý do nào đó. Tôi hiện đang sử dụng app.locals.basedir = process.env.PWD và hoạt động tốt. Cảm ơn bạn! – sclarson