-
Star
(409)
You must be signed in to star a gist -
Fork
(95)
You must be signed in to fork a gist
-
-
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); |
Good !
thank you
Спасибо. Очень понятно. Thank you
What exactly is body in req.body?
@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()
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!
I made a repo based on this:
https://github.com/gkoberger/express4-mongoose-api-example
Upgraded to Express 4, as well as included a
package.jsonand instructions on how to run it.