public
Created — forked from fwielstra/api.js

An example NodeJS / Mongoose / Express application based on their respective tutorials

  • Download Gist
api.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/* 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}]);
});
})
});
app.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// 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);
post.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 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);
thread.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12
// 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);

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.