User: gkal19
Autor: Gabriel Kalani
Data:
## 1. Crie um função que extenda EventEmitter, nela crie um method chamado init, ele deverá ser chamado toda vez que a sua função for iniciada. Use o código 04 como base (use ele no prototype).
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function User(data) {
this.name = data.name;
this.on('user:init', Name);
EventEmitter.call(this);
};
util.inherits(User, EventEmitter);
User.prototype.init = function() {
this.emit('user:init', this.name);
};
function Name(name) {
console.log('Tá tranquilo, tá compilado. Meu nome é MC', name);
};
var User = new User({name: 'Pokémon'});
User.init();
$ node rogue.js
Tá tranquilo, tá compilado. Meu nome é MC Pokémon
2. Faça um módulo simples para ler diretórios usando módulo FS (fs.readdir), usando o exemplo do código 03, esse modulo deve retornar uma Promise.
'use strict';
const fs = require('fs');
function readDir(path) {
return new Promise( function (resolve, reject) {
fs.readdir(path, function (err, data) {
err ? reject(err) : resolve(data);
});
});
}
// Executando
readDir('node_modules').then(function (data) {
console.log(data);
}).catch(function (err) {
console.log(err);
});
$ node rogue.js
[ 'mongoose' ]
3. Os schemas do mongoose podem usar promises, em seus alguns methods, de “crud”, liste 3 methods que usam promise, se chamada da função exec(), no final e 3 que usam exec(), mostre ao menos um exemplo de cada.
'use strict';
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/be-mean-instagram');
// Aqui criarei um schema de um Pokémon
const pokemonSchema = new mongoose.Schema({
name: String,
attack: Number,
defense: Number,
hp: Number,
speed: Number,
height: String,
types: [String],
created: {type: Date, default: Date.now}
});
const PokemonModel = mongoose.model('pokemons', pokemonSchema);
// Aqui está os dados do schema do meu Pokémon
var pokemon = {
name: 'Bulbasaur',
attack: 100,
defense: 100,
hp: 5000,
speed: 100,
height: 3,
types: ['fire', 'poke']
};
PokemonModel.create(pokemon)
// Create
.then((data) => {
console.log('Foi criado: ', data);
return PokemonModel.find({name: pokemon.name}).exec();
})
// Find
.then((data) => {
console.log('Foi Encontrado: ', data);
return PokemonModel.update({name: /nodemon/i}, {attack: 200});
})
// Update
.then((data) => {
console.log('Foi atualizado: ', data);
return PokemonModel.remove({name: /nodemon/i});
})
// Remove
.then((data) => {
console.log('Foi removido: ', data);
})
.catch((err) => {
console.log(err);
});
Foi criado: { types: [ 'fire', 'poke' ],
created: Sat Jun 11 2016 11:47:07 GMT+0000 (UTC),
_id: 575bfa3b824396e6061182e5,
height: '3',
speed: 100,
hp: 5000,
defense: 100,
attack: 100,
name: 'Bulbasaur',
__v: 0 }
Foi Encontrado: [ { types: [ 'fire', 'poke' ],
created: Sat Jun 11 2016 11:47:07 GMT+0000 (UTC),
__v: 0,
height: '3',
speed: 100,
hp: 5000,
defense: 100,
attack: 100,
name: 'Bulbasaur',
_id: 575bfa3b824396e6061182e5 } ]
Foi atualizado: { ok: 1, nModified: 0, n: 0 }
Foi removido: { result: { ok: 1, n: 0 },
connection:
EventEmitter {
domain: null,
_events:
{ close: [Object],
error: [Object],
timeout: [Object],
parseError: [Object],
connect: [Function] },
_eventsCount: 5,
_maxListeners: undefined,
options:
{ socketOptions: {},
auto_reconnect: true,
host: 'localhost',
port: 27017,
cursorFactory: [Object],
reconnect: true,
emitError: true,
size: 5,
disconnectHandler: [Object],
bson: {},
messageHandler: [Function],
wireProtocolHandler: {} },
id: 0,
logger: { className: 'Connection' },
bson: {},
tag: undefined,
messageHandler: [Function],
maxBsonMessageSize: 67108864,
port: 27017,
host: 'localhost',
keepAlive: true,
keepAliveInitialDelay: 0,
noDelay: true,
connectionTimeout: 0,
socketTimeout: 0,
destroyed: false,
domainSocket: false,
singleBufferSerializtion: true,
serializationFunction: 'toBinUnified',
ca: null,
cert: null,
key: null,
passphrase: null,
ssl: false,
rejectUnauthorized: false,
checkServerIdentity: true,
responseOptions: { promoteLongs: true },
flushing: false,
queue: [],
connection:
Socket {
_connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: 'localhost',
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 8,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
bytesRead: 575,
_bytesDispatched: 806,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
_idleNext: null,
_idlePrev: null,
_idleTimeout: -1,
read: [Function],
_consuming: true },
writeStream: null,
hashedName: '29bafad3b32b11dc7ce934204952515ea5984b3c',
buffer: null,
sizeOfMessage: 0,
bytesRead: 0,
stubBuffer: null } }