2013-10-17 63 views
0

我有Mongo的设置,我正在做的是在index.jade中,通过一系列用餐循环。Express/Jade TypeError

--app.js--

/** * 模块的依赖关系。 */

var express = require('express') 
mongoose = require('mongoose') 
, routes = require('./routes') 
, meal = require('./routes/meal') 
, 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.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(require('less-middleware')({ src: __dirname + '/public' })); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 
app.get('/new', meal.new); 

app.get('/meals', meal.getMeals) 
app.post('/meals', meal.add) 

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

--meals.js-- 


var mongoose = require('mongoose'); 

mongoose.connect("mongodb://localhost/nutritionTracker") 

var MealSchema = new mongoose.Schema({ 
mealId: Number, 
mealType: String, 
mealDetails: String 
}), 

Meals = mongoose.model('Meals', MealSchema); 


/* 
* New meal. 
*/ 

exports.new = function(req, res){ 
res.render('new'); 
}; 

/* 
* Insert new meal. 
*/ 

exports.add = function(req, res){ 

var meal = req.body; 

new Meals({ 
mealId: 1, 
mealType: meal.mealType, 
mealDetails: meal.mealDetails 
}).save(function (err, docs) { 
if (err) res.render("Error") 
}); 
res.render('new'); 
}; 

/* 
* Get all meals. 
*/ 

exports.getMeals = function(req, res){ 
Meals.find({}, function(err, docs) { 
res.render('index', { meals: docs }); 
}); 
}; 

--index.jade--

延伸布局

block content 
table.table.table-striped 
thead 
tr 
th Meal Type 
th Meal Details 
tbody 
each meal in meals 
tr 
td #{meal.type} 
td #{meal.details} 

a(href="/new", class="btn btn-primary btn-lg") Add Meal 

我不断收到此错误:

类型错误:... \意见\指数。玉:10 8 | th膳食细节9 | tbody> 10 |每餐饭11 | tr 12 | td#{meal.type} 13 | td#{meal.details}无法读取未定义的属性“长度”

任何想法?

回答

0

从您发布的内容不确定,但您可能希望确保您的查询实际上带回了您的期望。你有一个err变量传入你不使用的回调。

尝试用这个,让我知道它带回:

exports.getMeals = function(req, res){ 
    Meals.find({}, function(err, docs) { 
     console.log(err, docs); 
     if(err) return res.send(500, { 
      error: err 
     }); 
     res.render('index', { meals: docs }); 
    }); 
} 

Cannot read property 'length' of undefined可能是玉抱怨说,它可以通过结果不循环,因为它们是无效的(阵列)。

+0

http://prntscr.com/1y05lx这就是我得到的。 – user2417731

0

该问题可能存在于您的渲染代码中,您的代码将使用jade修改响应。这是变量传递给玉器的地方,我猜想最近对玉器和玉器的更新可能会导致问题。

当我更新我的玉石和表达时,我得到了这些错误。我看着examples in the jade repository.在最新[email protected][email protected]服务器呈现,象这样的数据玉文件:

server.get('/', function(req, res) { 
    return res.render('index.jade', { 
    title: 'Blog', 
    description: 'Your Page Description', 
    users: users 
    }); 
}); 

使用return res.render('index.jade', {meals:meals});为从旧版本的差异。