我正在尝试对我的日期模型属性使用mongoose findOne
方法,以仅使用最新文档中的数据。我正在使用EJS模板系统,并试图用我的视图使用此方法,但收到一个错误,event.findOne`线。我应该如何使用这种方法?应该在routes.js中调用吗?试图在EJS上使用FindOne Mongoose方法
eventsModel.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var EventSchema = new Schema({
name: String,
title: String,
company: String,
url: String,
date: { type: Date, default: Date.now },
upcomingEvent: { type: Boolean, default: false }
});
module.exports = mongoose.model('Event', EventSchema);
routes.js
var express = require('express');
var router = express.Router();
var Event = require('./models/eventsModel');
//GET '/'
router.get('/', function(req, res){
res.render('pages/index.ejs');
});
//GET '/about'
router.get('/about', function(req, res){
res.render('pages/about.ejs');
});
//GET '/media'
router.get('/media', function(req, res){
res.render('pages/media.ejs');
});
router.route('/admin/events/create')
.post(function(req, res){
var events = new Event();
events.name = req.body.name;
events.title = req.body.title;
events.company = req.body.company;
events.url = req.body.url;
events.upcomingEvent = req.body.upcomingEvent;
events.save(function(err){
if (err)
res.send(err);
res.redirect(303, '/events');
});
})
.get(function(req, res){
Event.find(function(err, events){
if (err)
res.send(err);
res.render('pages/events-create.ejs');
});
});
router.route('/admin/events/:events_id')
.get(function(req, res){
Event.findById(req.params.events_id, function(err, events){
if (err)
res.send(err);
res.json(events);
});
})
.put(function(req, res){
Event.findById(req.params.events_id, function(err, events){
if (err)
res.send(err);
res.json({ message: 'Event Updated'});
});
});
//GET '/events'
router.get('/events', function(req, res){
Event.find(function(err, events){
if (err)
res.send(err);
events.name = req.body.name;
events.title = req.body.title;
events.company = req.body.company;
events.url = req.body.url;
events.upcomingEvent = req.body.upcomingEvent;
res.render('pages/events.ejs', {
events : events
});
});
});
module.exports = router; //export all objects in router module
events.ejs
<!DOCTYPE HTML>
<html>
<head>
<% include ../partials/head %>
</head>
<body>
<% include ../partials/navigation %>
<div class="grid" id="lvc-events-title-container">
<div class="col-1-1">
<div id="events-heading">
<h1><i>-EVENTS</i></h1>
</div>
</div>
</div>
<div class="grid" id="lvc-current-event-container">
<div class="col-1-1">
<div id="current-event">
<% events.findOne({'events.date': -1}, function(events) { %>
<h2><i>-UPCOMING SPEAKER</i></h2>
<div id="current-event-image">
<img src="http://placehold.it/140x100" id="speaker-image">
<h3>John Doe</h3>
<p>Title</p>
<p>Company</p>
<% }); %>
</div>
</div>
</div>
</div>
<div class="grid" id="lvc-past-events-container">
<div class="col-1-1">
<div id="past-speakers">
<h2><i>-PAST SPEAKERS</i></h2>
<% events.forEach(function(events) { %>
<ul>
<li><a href="<%= events.url %>"><%= events.name %></a> (<%= events.title %> | <%= events.company %>)</li>
</ul>
<% }); %>
</div>
</div>
</div>
</body>
</html>
据我可以看到'events'在视图中被包裹对象阵列。它是javascript数组,你可以使用'filter'而不是'findOne' – Mirodil 2014-10-20 13:54:04