-
-
Save fwielstra/1025038 to your computer and use it in GitHub Desktop.
/* The API controller | |
Exports 3 methods: | |
* post - Creates a new thread | |
* list - Returns a list of threads | |
* show - Displays a thread and its posts | |
*/ | |
var Thread = require('../models/thread.js'); | |
var Post = require('../models/post.js'); | |
exports.post = function(req, res) { | |
new Thread({title: req.body.title, author: req.body.author}).save(); | |
} | |
exports.list = function(req, res) { | |
Thread.find(function(err, threads) { | |
res.send(threads); | |
}); | |
} | |
// first locates a thread by title, then locates the replies by thread ID. | |
exports.show = (function(req, res) { | |
Thread.findOne({title: req.params.title}, function(error, thread) { | |
var posts = Post.find({thread: thread._id}, function(error, posts) { | |
res.send([{thread: thread, posts: posts}]); | |
}); | |
}) | |
}); |
// The main application script, ties everything together. | |
var express = require('express'); | |
var mongoose = require('mongoose'); | |
var app = module.exports = express.createServer(); | |
// connect to Mongo when the app initializes | |
mongoose.connect('mongodb://localhost/norum'); | |
app.configure(function(){ | |
app.use(express.bodyParser()); | |
app.use(express.methodOverride()); | |
app.use(app.router); | |
}); | |
// set up the RESTful API, handler methods are defined in api.js | |
var api = require('./controllers/api.js'); | |
app.post('/thread', api.post); | |
app.get('/thread/:title.:format?', api.show); | |
app.get('/thread', api.list); | |
app.listen(3000); | |
console.log("Express server listening on port %d", app.address().port); |
// The Post model | |
var mongoose = require('mongoose') | |
,Schema = mongoose.Schema | |
,ObjectId = Schema.ObjectId; | |
var postSchema = new Schema({ | |
thread: ObjectId, | |
date: {type: Date, default: Date.now}, | |
author: {type: String, default: 'Anon'}, | |
post: String | |
}); | |
module.exports = mongoose.model('Post', postSchema); |
// The Thread model | |
var mongoose = require('mongoose') | |
, Schema = mongoose.Schema; | |
var threadSchema = new Schema({ | |
title: String, | |
postdate: {type: Date, default: Date.now}, | |
author: {type: String, default: 'Anon'} | |
}); | |
module.exports = mongoose.model('Thread', threadSchema); |
Thanks, thats exactly what i was looking for
Thank you. This demo help me a lot !
Great demo as a starting point. Thanks.
What about checking whether Mongoose actually connected to the database or whether an error was thrown? (as seen in code snippet 3 at http://mongoosejs.com/docs/index.html) I came here wondering (I'm new to this matter, too) if all following application logic (e.g. routes) should go into the callback of the 'open' event, but unfortunately didn't find a solution. (I assume it should go there, but that looks odd, doesn't it?)
Regardless, thanks for sharing you knowledge with the community!
@c0d0g3n Came wondering the same thing, mongoose docs you reference make it sound important then sort of gloss over it at the same time
Thank you! you are the best!
@macdonjo the body of HTTP request sent by the client. On a HTTP Post request, the body can be anything. In this sample, is a JSON object, which is parsed from a string by the express.bodyParser()