
npm init
npm install express@4.8 --save
/config/express.js
Rodando o servidor (http://localhost:3000):
node server
Templates Engine do Express => EJS (http://embeddedjs.com)
npm install ejs@0.8 --save
npm install nodemon -g
nodemon server
npm install body-parser@1.6 method-override@2.1 --save
npm install bower@1.3 -g
bower init
bower install angular#1.3 --save
bower install angular-route#1.3 --save
bower install bootstrap#3.3 --save
bower install angular-resource#1.3 --save
npm install mongodb@1.4 --save
npm install mongoose@3.8 --save
OAuth 2.0 com Passport(http://passportjs.org/)
npm install passport@0.2 --save
npm install express-session@1.7 cookie-parser@1.3 --save
npm install passport-github@0.1 --save
npm install mongoose-findorcreate@0.1 --save
Add. Helmet => Coletânea de middlewares de tratamento de header já prontos para uso, tornando nossa aplicaçãomais segura
npm install helmet@0.4 --save
npm install mongo-sanitize@1.0 --save
npm install grunt@0.4 --save-dev npm install -g grunt-cli@0.1
npm install grunt-contrib-copy@0.7 --save-dev npm install grunt-contrib-clean@0.6 --save-dev
npm install grunt-contrib-concat@0.5 --save-dev npm install grunt-contrib-uglify@0.6 --save-dev npm install grunt-contrib-cssmin@0.10 --save-dev npm install grunt-usemin@2.6 --save-dev npm install grunt-ng-annotate@0.5 --save-dev
npm install karma@0.12 --save-dev npm install -g karma-cli@0.0 karma init config/karma.config.js karma start config/karma.config.js bower install angular-mocks#1.3 --save-dev
npm install -g protractor@1.5 webdriver-manager update
node server protractor config/protractor.js
npm install karma-phantomjs-launcher@0.1 --save-dev karma start config/karma.config.js --single-run --browsers PhantomJS npm install karma-ng-html2js-preprocessor@0.1 --save-dev
OpenShift (http://www.openshift.com/)
Instalando o cliente em linha de comando https://developers.openshift.com/en/getting-started-overview.html
gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/
gem install rhc
gem install net-ssh -v 2.9.3.beta1
rhc setup -k
rhc create-app contatooh nodejs-0.10 mongodb-2.4
rhc show-app contatooh
https://contatooh-rafambbr.rhcloud.com/
rhc tail contatooh
rhc set-env NODE_ENV='production' -a contatooh
rhc set-env CLIENT_ID='seuNovoClientId' -a contatooh
rhc set-env CLIENT_SECRET='seuNovoClientSecret' -a contatooh
rhc set-env NPM_CONFIG_PRODUCTION="true" -a contatooh
mongo --port 27017 --host localhost
use contatooh
var contato1 = { "nome" : "Contato 1 Mongo", "email" : "cont1@empresa.com.br" }
var contato2 = { "nome" : "Contato 2 Mongo", "email" : "cont2@empresa.com.br" }
var contato3 = { "nome" : "Contato 3 Mongo", "email" : "cont3@empresa.com.br" }
db.contatos.insert(contato1)
db.contatos.insert(contato2)
db.contatos.insert(contato3)
show dbs
show collections
db.contatos.find();
db.dropDatabase();
var contatos = db.contatos.find()
contatos.next()
contatos.next()
contatos.next()
db.contatos.findOne()
var criterio = { "email" : "cont2@empresa.com.br" }
var contato = db.contatos.find(criterio)
contato
var criterio = { "nome" : /tato/i }
var contatos = db.contatos.find(criterio)
db.contatos.count()
db.contatos.count({ "nome" : /to 2/i })
db.contatos.find({ "$or" : [
{ "email" : "cont2@empresa.com.br" },
{ "nome" : "Contato 1 Mongo" }
])
contatos que não contenham como e-mail 'cont2@empresa.com.br', através do query selector $ne
db.contatos.find({
"email" : { "$ne" : "cont2@empresa.com.br" }
});
Operadores para query no MongoDB => http://docs.mongodb.org/manual/reference/operator/query/
Indexando documentos, no JSON informado O valor 1 indica que queremos um índice ascendente, mas é possível trabalhar na ordem decrescente utilizando -1 como valor.
db.contatos.ensureIndex({ "email" : 1 })
db.contatos.getIndexes()
db.contatos.dropIndex('email_1')
Mais informações de como criar indeces em => http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/
db.contatos.ensureIndex( { email: 1 }, { unique: true } )
Retornando apenas um pedaço do Documento, onde o primeiro parâmetro '{}' é o filtro utilizado e o segundo parâmetro representa quais propriedades queremos retornar
o parametro '1' indica que queremos que venha essa propriedade e o '0' indica que não é para retornar essa propriedade
db.contatos.find({}, { "nome" : 1, _id : 0 })
db.contatos.remove()
db.contatos.remove({ "email" : "cont1@empresa.com.br" })
var criterio = { "email" : "cont3@empresa.com.br" }
var contato = db.contatos.findOne(criterio);
contato.nome = "Nome Alterado"
db.contatos.update(criterio, contato)
var contato4 = { "nome" : "Contato 4 mongo", "email" : "cont4@empresa.com.br" }
db.contatos.update({ "nome" : /4/ }, contato4, true);
db.contatos.update(
{ "email" : "cont4@empresa.com.br"},
{ "$set" : { "nome" : "Mais uma alteração" } }
)
Algo parecido com transação no MongoDB => http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/
var contato = db.contatos.findOne({ "email" : /cont2/ })
var emergencia = db.contatos.findOne({ "email" : /cont3/})
contato.emergencia = emergencia._id
db.contatos.update({ "_id" : contato._id}, contato);
contato = db.contatos.findOne( "_id", contato._id)
var emergencia = db.contatos.findOne({ "_id" : contato.emergencia});
emergencia
var contato = db.contatos.findOne({ "email" : /cont2/ })
contato
var emergencia = db.contatos.findOne({ "_id" : contato.emergencia});
contato.emergencia = {
"$ref" : "contatos",
"$id" : emergencia._id
}
db.contatos.update({"_id" : contato._id}, contato);
contato = db.contatos.findOne({"_id" : contato._id});
contato
contato.emergencia
Mais tipos de consultas no mongo em => http://docs.mongodb.org/manual/tutorial/query-documents/
function refResolver(ref) {
return db[ref.$ref].findOne({"_id": ref.$id})
}
var emergencia = refResolver(contato.emergencia);
emergencia