【发布时间】:2014-12-15 12:22:44
【问题描述】:
我正在尝试将猫鼬findOne 方法与我的日期模型属性一起使用,以仅使用我最近文档中的数据。我正在使用 EJS 模板系统,并试图在我的视图中使用此方法,但收到错误,} has no method 'findOne' at myevents.findOne` 行。我应该如何使用这种方法?应该在 routes.js 中调用它吗?
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
标签: node.js mongodb express mongoose ejs