Download - Be MEAN
Be MEAN
Criando aplicações com MongoDb, Express, AngularJs e Node.js
github.com/suissaabout.me/suissa
@osuissa
C++JSON/BSON
ReplicaSharding
GridFSMap/Reduce
V8C/C++
I/O AsyncEvent Drive
MVCRoutes
TemplatesDirectives
Dependency InjectionTwo Way Data-binding
Organização dos arquivos
app.jspackage.jsonmodules/
db/public/routes/views/
package.json{ "name": "application-name" , "version": "0.0.1" , "private": true , "dependencies": { "express": "3.0.0" , "jade": ">= 0.0.1" , "mongo": "*" , "mongoose": "*" }}
app.js/**
* Module dependencies.
*/
var express = require('express'),
routes = require('./routes'),
api = require('./routes/api');
var app = module.exports = express();
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);
});
app.jsapp.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true,
showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
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);
app.js// Start server
app.listen(3000, function(){
console.log("Server rodando na porta 3000");
});
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'
})
}
}
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;
})
}
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);
}]);
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!';
});
}
modules/db/user.js/**
* Module dependencies.
*/
var mongoose = require('mongoose')
, Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/database_name);
var db = mongoose.connection;
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);