be mean

34
Be MEAN Criando aplicações com MongoDb, Express, AngularJs e Node.js

Upload: suissa

Post on 17-May-2015

2.489 views

Category:

Technology


1 download

DESCRIPTION

Construindo sistemas com MongoDb, Express, AngularJs e Node.js. Palestra ministrada no TDC São Paulo 2013. Trilha Javascript.

TRANSCRIPT

Page 1: Be MEAN

Be MEAN

Criando aplicações com MongoDb, Express, AngularJs e Node.js

Page 3: Be MEAN
Page 4: Be MEAN
Page 5: Be MEAN
Page 6: Be MEAN
Page 7: Be MEAN
Page 8: Be MEAN

C++JSON/BSON

ReplicaSharding

GridFSMap/Reduce

Page 9: Be MEAN
Page 10: Be MEAN
Page 11: Be MEAN
Page 12: Be MEAN

V8C/C++

I/O AsyncEvent Drive

Page 13: Be MEAN
Page 14: Be MEAN
Page 15: Be MEAN
Page 16: Be MEAN

MVCRoutes

TemplatesDirectives

Dependency InjectionTwo Way Data-binding

Page 17: Be MEAN
Page 18: Be MEAN
Page 19: Be MEAN
Page 20: Be MEAN
Page 21: Be MEAN
Page 22: Be MEAN

Organização dos arquivos

app.jspackage.jsonmodules/

db/public/routes/views/

Page 23: Be MEAN

package.json{ "name": "application-name" , "version": "0.0.1" , "private": true , "dependencies": { "express": "3.0.0" , "jade": ">= 0.0.1" , "mongo": "*" , "mongoose": "*" }}

Page 24: Be MEAN

app.js/**

* Module dependencies.

*/

var express = require('express'),

routes = require('./routes'),

api = require('./routes/api');

var app = module.exports = express();

Page 25: Be MEAN

app.js// Configuration

app.configure(function(){

app.set('views', __dirname + '/views');

app.set('view engine', 'jade');

app.use(express.bodyParser());

app.use(express.methodOverride());

app.use(express.static(__dirname + '/public'));

app.use(app.router);

});

Page 26: Be MEAN

app.jsapp.configure('development', function(){

app.use(express.errorHandler({ dumpExceptions: true,

showStack: true }));

});

app.configure('production', function(){

app.use(express.errorHandler());

});

Page 27: Be MEAN

app.js// Routes

app.get('/', routes.index);

app.get('/user/:id, routes.user);

// JSON API

app.get('/api/user/:id, api.userGet);

app.post('/api/user, api.userPost);

app.put('/api/user, api.userPut);

app.delete('/api/user, api.userDelete);

// redireciona todas outras para o index

app.get('*', routes.index);

Page 28: Be MEAN

app.js// Start server

app.listen(3000, function(){

console.log("Server rodando na porta 3000");

});

Page 29: Be MEAN

routes/api.js/**

* Create user

*/

exports.userPost = function (req, res) {

var user = new User(req.body)

user.save(function (err) {

if (err) {

return res.render('users/signup', {

errors: utils.errors(err.errors),

user: user,

title: 'Sign up'

})

}

}

Page 30: Be MEAN

routes/api.jsexports.userGet = function (req, res, next, id) {

User

.findOne({ _id : id })

.exec(function (err, user) {

if (err)

return next(err);

else

return user;

})

}

Page 31: Be MEAN

public/js/myapp.js'use strict';

angular.module('myApp', ['myApp.filters', 'myApp.

services', 'myApp.directives']).

config(['$routeProvider', '$locationProvider', function

($routeProvider, $locationProvider) {

$routeProvider.when('/user, {templateUrl: 'user',

controller: AppCtrl});

$routeProvider.when('/user/:id, {templateUrl: 'user',

controller: AppCtrl});

$routeProvider.otherwise({redirectTo: '/});

$locationProvider.html5Mode(true);

}]);

Page 32: Be MEAN

public/js/controllers.js'use strict';

/* Controllers */

function AppCtrl($scope, $http, $routeParams) {

var id = $routeParams.id;

$http({method: 'GET', url: '/api/user/'+id}).

success(function(data, status) {

$scope.name = data.name;

$scope.msg = 'Usuário encontrado.';

}).

error(function(data, status {

$scope.msg = 'Usuário não encontrado!';

});

}

Page 33: Be MEAN

modules/db/user.js/**

* Module dependencies.

*/

var mongoose = require('mongoose')

, Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/database_name);

var db = mongoose.connection;

Page 34: Be MEAN

modules/db/user.js/**

* User Schema

*/

var UserSchema = new Schema({

name: { type: String, default: '' },

email: { type: String, default: '', unique: true },

username: { type: String, default: '' },

hashed_password: { type: String, default: '' },

salt: { type: String, default: '' },

authToken: { type: String, default: '' },

});

mongoose.model('User', UserSchema);