Ordenador usuario
Hosting de FB
== DAME EL HTML =>
<= TOMA EL HTML ==
== DAME LOS POSTS =>
<= TOMA LOS POSTS ==
Le he dado like a este post =>
<= ok, lo tengo en cuenta ==
== He subido un nuevo post =>
<= ok, lo tengo en cuenta ==
API
Ordenador usuario
Servidor facebook
== DAME EL HTML =>
<= TOMA EL HTML ==
== GET /POSTS =>
<= TOMA LOS POSTS ==
POST /POST/ID/LIKES/ =>
<= ok, lo tengo en cuenta ==
== POST: /ME/POSTS =>
<= ok, lo tengo en cuenta ==
Hosting de FB
API
users
posts
pages
users/id/messages
users/id/friends
GET ( URL )
var URL = 'https://jsonplaceholder.typicode.com/users'
GET ( URL + '/25' )
POST ( URL, DATA )
PUT ( URL + '/25', DATA )
DELETE ( URL + '/25' )
GET ( URL )
var URL = 'https://jsonplaceholder.typicode.com/users'
GET ( URL + '/25' )
POST ( URL, DATA )
PUT ( URL + '/25', DATA )
DELETE ( URL + '/25' )
var http = require('http');
var server = http.createServer( ( req, res) => {
console.log('Estoy atento a las llamadas');
});
server.listen(5000, (err) => {
if (!err){
console.log('Servidor escuchando en el puerto 5000');
}
});
var http = require('http');
var server = http.createServer( ( req, res) => {
console.log('Estoy atento a las llamadas');
});
server.listen(5000, (err) => {
if (!err){
console.log('Servidor escuchando en el puerto 5000');
}
});
Ordenador usuario
Servidor facebook
req.url
req.method
req.headers
/USERS
"GET" || "POST" || "PUT" || "DELETE"
{ }
Ordenador usuario
Servidor facebook
var http = require('http');
var server = http.createServer(serverFunc)
function serverFunc ( req, res) {
res.write('Hola mundo');
res.end();
};
server.listen(5000);
var http = require('http');
var server = http.createServer(serverFunc)
function serverFunc ( req, res) {
res.setHeader('Content-Type', 'application/json');
res.write(JSON.stringify({ a: 1 }));
res.end();
};
server.listen(5000);
Crea un servidor que esté escuchando por el puerto 4200.
Cada vez que reciba una petición get a la url /number, nos devuelve un número aleatorio del 1 al 100.
Cada vez que reciba una petición get a la url /randomGroup, nos devuelve un número aleatorio del 1 y el 4.
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
GET: "http://localhost:3000/ " => 'Hello world'
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
POST: "http://localhost:3000/ " => ¿?
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
GET: "http://localhost:3000/users " => ¿?
var express = require('express')
var app = express()
var users = [{name : 'a'},{name : 'b'}]
app.get('/users', function (req, res) {
res.json(users);
})
app.listen(3000)
GET: "http://localhost:3000/users" => [ {} , {} ]
1 RECURSO = 1 URL
STANDARD => NOUNS
http://localhost:3000/users
http://localhost:3000/books
http://localhost:3000/books/3
También se suelen nombrar en singular
EN LA PRÁCTICA
app.get('/users', function (req, res) {
res.json(users);
})
app.get('/users/:id', function (req, res) {
const userId = req.params.id;
const user = users.find(u => u.id == userId);
res.json(user);
});
<form action="//localhost:3000/users" method="post">
<div>
<label for="email">Email: </label>
<input type="text" name="email"></input>
</div>
<input type="submit"></input>
</form>
EN EL LADO DEL CLIENTE
createUser( user : User) {
return axios.post(url, user)
.then(res => res.data)
}
o
app.post('/users', function (req, res) {
const newUser = req.body; // ¿UNDEFINED?
newUser.id = ();
users.push(newUser);
res.json(newUser);
})
¿ Y EL CONTENIDO DEL FORMULARIO ?
ANTES DE EXPRESS 4.16.0 - Release date: 2017-09-28
NPM I BODY-PARSER
var express = require('express')
var bodyParser = require('body-parser')
var app = express();
// Middlewares
app.use(bodyParser.json());
CON EXPRESS 4.16+
NPM I BODY-PARSER
var express = require('express')
/* var bodyParser = require('body-parser') */
var app = express();
// Middlewares
app.use(express.json());
IMPORTANTE
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
ERROR
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
return res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
npm i -g nodemon
Pues como ya hemos hecho con otras apis, mediante axios y si usas servicios mejor que mejor ;)
Cuando tu app arranque tendrás que hacerle un GET a tu server, ¿a dónde?
axios.get('http://localhost:5000/tasks')
Cuando se pulse ese botón, tendrás que mandar a hacer un delete a tu api y luego, si todo ha ido, bien borrarlo de la pantalla
Cuando se pulse ese botón, tendrás que avisar a la api que se ha completado una tarea.
Aquí ya hay varias opciones:
- Si seguimos el estándar. PATCH /api/todos/20 y en el body el atributo isCompleted : true.
- Otras opciones. Por ejemplo, crear un endpoint concreto para esta "acción" GET/api/completarTODO/20, o podemos mandar la tarea con su completed a true por un PUT
Al introducir una tarea por el front :
- Hacer un post con axios a la api
- O bien si estuviese envuelto en un formulario especificar en el form que se hace un POST y que el action es a tu url.
Oye, hemos visto una app muy sencilla por ahí que se llama todolist y queremos presentar un MVP de un producto parecido para dentro de un par de horas a un inversor que viene a reunirse con nosotros.
Me han dicho que eres fullstack así que seguro que lo haces rápido :)
Haz primero la API, e incluso prueba que funcionen todos los endpoints desde POSTMAN. Si puedes luego conectarlo con tu frontend de un todolist anterior pues guay. !
Coge este gif como referencia para hacer una app (web) que permita añadir, borrar y completar items de una lista y que esta lista no se pierda y se quede guardada en el backend.
Queremos desarrollar una api restful con node para un proyecto copia de twitter. Aunque de momento, será solo una primera versión con usuarios y tweets como si fuese un blog personal.
USUARIO
username* : string<uniq>
name? : string
email* : string
tweets : Tweet []
TWEET
id* : string<uniq>
text* : string
owner* : string<ID>
createdAt : timestamp
OJO ! CONTROLA QUE LA API NO SE PUEDA QUEDAR PILLADA EN NINGÚN MOMENTO, controla campos vacíos, request inválidas, etc etc y devuelve el error en la respuesta y el código correcto para dicho caso
Oye, resulta que anoche se fue la luz en la oficina, y al resetearlo parece que habíamos perdido toda la información !!
No queremos que esto vuelva a pasar, hemos perdido a muchos usuarios por el camino, dale persistencia a los datos mediante ficheros :)
Modulo fs => const fs = require('fs')
Métodos fs.writeFileSync y fs.readFileSync