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
       
  • 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