PG6300-14 webutvikling og api-design
03: Documents, MongoDB, Mongoose
Pensum

$19.24 for Kindle edition @ Amazon
(kan leses online)
Tar et par timer å bla gjennom
(eller en uke å løse oppgavene til)
Lenes tungt på
Det er under 150 kroner
Pls read it
Node.js
- Runtime for JavaScript (på server)
- Your computer is a server!

REST

http://phpflow.com/wp-content/uploads/2012/07/rest-websrvices.jpg
Express + body-parser
var server = require('express')();
var bodyParser = require('body-parser');
server.use(bodyParser.json());
var port = 5432;
server.get('/api', function(req, res) {
return res.status(201).send({message: 'hi'});
});
server.post('/api', function(req, res) {
console.log(req.body);
return res.send(req.body);
});
server.listen(port);
console.log('listening on: ' + port);Static content
server.use(express.static(__dirname + './path/to/static/files'));- Server statisk innhold
- Filer, bilder
- Angular-appen?
- (note: Emmet)

Documents vs. Databases
- Remember SQL?
- Forget all that
Relasjoner vs. dokumenter



Lagringsformat: bson
- Binary JSON
- ObjectId
- Basert på timestamp
- Basert på timestamp
- Dokumenter "=" objekter
-
Joins
- Polymorfi
Enter mongodb
$ mongo exampleDb
MongoDB shell version: 2.6.5
connecting to: exampleDb
> db.users.insert({username: 'Theneva'})
WriteResult({ "nInserted" : 1 })
> db.users.insert({username: 'HeroK0'})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("54c5fbe88ede449775e517d2"), "username" : "Theneva" }
{ "_id" : ObjectId("54c5fbf58ede449775e517d3"), "username" : "HeroK0" }http://docs.mongodb.org/manual/installation/
OSX-PS:
$ brew info mongodb
Mongodb
- Ikke sett opp noe på forhånd; Mongo lager...
- DB
- Collections ("tabeller")
- MEN sørg for at ting kjører!

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', { name: String });
var kitty = new Cat({ name: 'Zildjian' });
kitty.save(function (err) {
if (err) // ...
console.log('meow');
});Everything is a schema
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/exampleDb', function() {
console.log('Connected to MongoDB');
});
var personSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true }
});

Models brukes for alt
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/exampleDb', function() {
console.log('Connected to MongoDB');
});
var personSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true }
});
var Person = mongoose.model('Person', personSchema);
var a = new Person({
name: 'Rebecca Black',
email: 'rebecca@rebeccablackonline.com'
});
a.save();Embedded documents
- Eksporter schema for subdoc
- Referer som vanlig
- Eksporter model, referer til model.schema?
Fra forrige gang:
RAM-"persistering" i Express
var express = require('express');
var app = express();
app.use(require('body-parser').json());
var artists = [
'Rebecca Black',
'Double Take',
'Alison Gold',
'Jenna Rose',
'Alana Lee'
];
app.get('/', function(req, res) {
res.send(artists);
});
app.post('/', function(req, res) {
artists.push(req.body.name); // some artist name
res.status(201).send();
});
app.listen(2345);PS: Fantastiske artister
Express <3 Mongoose
var app = require('express')();
var mongoose = require('mongoose');
app.use(require('body-parser').json());
var personSchema = new mongoose.Schema({
name: { type: String, required: true }
});
var Person = mongoose.model('Person', personSchema);
app.get('/person', function(req, res) {
var person = new Person({
name: 'Martin'
});
res.send(person);
});
app.listen(1234);
EKSEMPEL: Fra bunnen av, med persistering
Chrome DevTools

Angular + API
- API server
- Serve static content
- Angular $http
EKSEMPEL: Bower + enkel Angular-app
Mappeelement 1
- It's Learning!
PG6300-14-03 Documents, MongoDB, Mongoose
By theneva
PG6300-14-03 Documents, MongoDB, Mongoose
Forelesning 2 i PG6300-14 Webutvikling og API-design
- 660