Вы находитесь на странице: 1из 8

1.

Instalacin del Node JS


2. Instalacin consola cygwin
Instalar git, ssh, nano, wget
Comando npm v
o Npm es un gestor de paquetes de Node JS para Javascript, ayuda con las
dependencias de la aplicain.
o Instala paquetes
o Se pude instalar Angular
Npm install g npm (para actulizarlo)

3. Instalacin de MongoDB
Instalar en el disco C una carpeta Data y adentro una db

4. Instalar el proyecto
Desde consola:
o www (cd /cygdrive/c/wamp/www)
o mkdir (nombre proyecto)
o cd (nombre proyecto)
o npm init -> Llenar datos del proyecto
o Esto crea un json que tiene el package

5. Generar dependencias
Se llama al npm install y se pone al final save, para que se guarde y cuando exportemos el
proyecto a otro lado con solo poner npm install se gurden todas las dependencias
o Primero instalamos express (framework para API REST sobre node JS)
npm install express --save
o Instalamos
bcrypt-nodejs (para encriptar contraseas)
body-parser (lo que lleva como post lo pasamos a objeto de jsnon)
connect-multiparty (recibir archivos por la variable FILE y poder guardarlos
en la API)
jwt-simple (trabajar con tokens)
moment
mongoose (trabajar con mongo)
mongoose-pagination
nodemon save-dev (solo en desarrollo y no en produccin)(para que se
cargue el servidor de nuevo cuando hacemos cambios y no tener que
hacerlo manual)

6. Base de datos
Crear base de datos
o Se tiene que tener inicializado mongod.exe (demonio) tiene que estar corriendo
para que funcione
o Para crearla se usa el cmando use
o Se pasa la base de datos a una variable db
o Db.<tabla>.save({aca se puede guardar un JSON});
o Db.<tabla>.find(); ->muestra los registros
o Show dbs -> muestra las bases de datos

7. Crear conexin base de datos


Fichero index.js en la raz del directorio
'use strict'

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/curso_mean2', (err, res)=>{


if(err){
throw err;
}else{
console.log("Base de datos ok");
}
});
Ejecutar automticamente cuando se producen cambios en el cdigo con nodemon. Se
modifica el package.json en la parte de scripts
o "start":"nodemon index.js",
Cuando ponemos npm start en la consola se lanza la app(?)

8. Crear el servidor con express


Creamos fichero app.js en la raz

'use strict'

var express = require('express');


var bodyParser = require('body-parser');
var app = express();//con esto creamos la aplicacion

//cargar rutas

app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json()); //convierte a json las peticiones http

//configurar cabeceras http

//carga de rutas base

app.get('/pruebas', function(req, res){


res.status(200).send({message:'bienvenido'});
});//cuando entramos a la url mas /pruebas el manejador es este

module.exports = app; //utilizar express dentro de otros ficheros que incluyan a app

En el index.js
var app = require('./app');
var port = process.env.PORT || 3977;

app.listen(port, function(){
console.log("Servidor corriendo en http://localhost:"+port);
});

9. Crear el Modelo
Se crea una carpeta en la raiz: models
Se agrega el <modelo/tabla>.js
'use strict'

var mongoose = require('mongoose');


var Schema = mongoose.Schema;

var <table>Schema = Schema({


title: String,
description: String,
year: Number,
image: String
artist: {type: Schema.ObjectId, ref: 'Artist'} //relaciones
});

module.exports = mongoose.model('<table>', <tabla>Schema);

10. Crear contolador


Creamos la carpeta controllers
Creamos un archive <table>.js
'use strict'

function ping (req, res){


res.status(200).send({
message: 'pong'});
};

module.exports = {
ping
};
Creamos la carpeta routes
Creamos el archive <table>.js
'use strict'

var express = require('express');


var <table>Controller = require('../controllers/<table>);

var api = express.Router();

api.get('/ping', <table>Controller.ping);

module.exports = api;

Cargamos las rutas en app.js


var <table>_routes = require('./routes/<table>');
Cargamos la ruta base usando un middleware:
app.use('/api', user_routes);//todas las conultas tienen que empezar con un /api

11. Dar de alta un usuario en la base de datos (con el controlador)


En routes/user agregamos
o api.post('/register', UserController.saveUser);
En controllers/user
o Declaramos arriba
var bcrypt = require('bcrypt-nodejs');//encriptador
var User = require('../models/user');//cargamos como una clase de tipo
User
o Creamos un objeto de tipo User y le asignamos los valores que nos trae el body
(req.body que es un mtodo del body-parser)
o Se hashea el pass
o Se guarda en la base de datos user.save de mongoose
function saveUser(req, res){
var user = new User();

var params = req.body;

//console.log(params);
user.name = params.name;
user.surname = params.surname;
user.image = 'null';
user.email = params.email;
user.role = 'ROLE_USER';

if (params.password){
//Encriptar pass
bcrypt.hash(params.password, null, null, function(err, hash){
user.password = hash;
if (user.name != null && user.surname!=null && user.email
!= null){
//Guardar en base de datos
user.save((err, userStored) => {
if(err){

res.status(500).send({message:'Error al guardar el usuario'});


}else{
if(!userStored){

res.status(404).send({message : 'No se ha registrado el usuario'});


}else{
console.log(userStored);
res.status(200).send({user:
userStored});
}
}
});
}else{
res.status(200).send({message: 'Ingrese todos los
datos'});
}
});
}else{
res.status(200).send({message: 'Ingrese una contrasea'});
}

12. Login
Crear otra funcin en el controlador loginUser
Recordar crear la ruta en route/user
Exportar el modulo
function loginUser(req, res){

var params = req.body;


var password = params.password;
var email = params.email;

User.findOne({email: email.toLowerCase()}, (err, user) => {


if(err){
res.status(200).send({message: 'Usuario o contrasea
incorrectos'});
}else{
if(!user){
res.status(200).send({message: 'Usuario o contrasea
incorrectos'});
}else{
bcrypt.compare(password, user.password, function(err,
check){
if(check){
if(params.gethash){
//token jwt
}else{
res.status(200).send(user);
}
}else{
res.status(200).send({message: 'Usuario o
contrasea incorrectos'});
}
});
}
}
});

13. Usar JWT


Sirve para crear token de autenticacin con una clave de cifrado
Utilizamos moment para asignarle fecha de caducidad
Se crea una carpeta services y ah un archivo jwt.js
'use strict'

var jwt = require('jwt-simple');


var moment = require('moment');
var clave = "GHJhgjhdlksKJ654s5sg654fSdssefs6sqe";

exports.createToken = (user) => {


var payload = {
name: user.name,
surname: user.surname,
email: user.email,
role: user.role,
image: user.image,
iat: moment().unix(),
exp: moment().add(30, 'days').unix()
}

return jwt.encode(payload, clave);


};

14. Crear middleware


Crear carpeta middlewares y un archivo authenticated.js
UN middleware es aquello que se ejecuta antes de realizar una accin del controlador
Se lo llama desde routes en el segundo parametro
o api.get('/ping', md_auth.ensureAuth, UserController.ping);
'use strict'

var jwt = require('jwt-simple');


var moment = require('moment');
var clave = "GHJhgjhdlksKJ654s5sg654fSdssefs6sqe";

exports.ensureAuth = (req, res, next) => {


if(!req.headers.authorization){
return res.status(403).send({message: 'Sin cabeceras'});
}else{
var token = req.headers.authorization.replace(/['"]+/g, '');

try{
var payload = jwt.decode(token, clave);
if(payload.exp<=moment().unix()){
return res.status(401).send({message: 'El token ha
expirado'});
}else{
req.user = payload;
next();
}

}catch(ex){
console.log(ex);
return res.status(404).send({message: 'Token no valido'});

}
};

15.

Вам также может понравиться