Este es un proyecto que he estado empezando y que quiero completar como Fullstack. Hay un juego que se llama Zenless Zone Zero que sale el 6 de julio. Y como apenas está empezando quiero hacer una API.
Estoy utilizando Vscode y Postman
Primero empezamos con instalar express, además que yo agregue el port por si las dudas porque luego otros port son usados por Windows u otros programas. Luego agregamos app.get(...)
para que podamos usar el server de express.
import express from'express';
import bodyParser from'body-parser';
const app = express();
const PORT = 5120;
app.use(bodyParser.json());
app.get('/', (req, res) => {
res.send('Welcome to Zenless Zone Zero API');
});
Yipi, si funciona
Lo sé en el curso, nunca menciona como conectar o usar MongoDB, pero quise ver una manera para no tenerlo en local y, ya que estamos mejor uso una base de datos. Así que mi respuesta fue <ins>MONGODB</ins>. Pero la verdad es muy sencillo, les juro que es más complicado hacerte la cuenta y ver la interfaz.
Instalas moongose
npm i mongoose
Recuerda agregar tu cuenta y password de tu base de datos. No te preocupes el mismo MongoDB te lo da.
import mongoose from 'mongoose';
const MONGODBCONNECTION =
'mongodb+srv://:@ejemplodb.pl0cjyv.mongodb.net/?retryWrites=true&w=majority&appName=ejemplodb';
mongoose
.connect(MONGODBCONNECTION)
.then(() => {
console.log('Connected Database');
app.listen(PORT, () => {
console.log(`Server running on port http://localhost:${PORT}`);
});
})
.catch(() => {
console.log('Connection failed');
});
Mi recomendación es que instales moongose
técnicamente puedes hacerlo sin él, pero es un poco más laborioso, pero no queremos eso, al menos yo.
Puede ser lo que sea pero, yo estoy usando personajes
Vas a crear un nuevo archivo
Esa nomenclatura es para saber que es un modelo de lo que estés usando. No tienes que nombrarlo así, pero es una buena práctica. Puedes llamarlo pudin.js
si quieres.
import mongoose from 'mongoose';const CharacterSchema = mongoose.Schema({
name: {
type: String,
required: [true, 'Please enter character name'],
},
model_type: {
type: String,
required: [true, 'Please enter model_type'],
},
rank: {
type: String,
required: [true, 'Please enter rank'],
},
attribute: {
type: String,
required: [true, 'Please enter attribute'],
},
style_primary: {
type: String,
required: [true, 'Please enter style_primary'],
},
style_secondary: {
type: String,
required: [true, 'Please enter style_secondary'],
},
faction: {
type: String,
required: [true, 'Please enter faction'],
},
skills: {
type: String,
required: [true, 'Please enter skills'],
},
});
const Character = mongoose.model('Character', CharacterSchema);
exportdefault Character;
WOW ES MUCHO TEXTO. Sí, pero importamos moongose
para usarlo.
Los Schema es la estructura que indica cuál es la forma en la que están estructurados los documentos que se almacenan en una colección de MongoDB.
Recuerda importar el schema en index.js
import Character from'./models/characters.model.js';
¡Pero Alan! Estás usando async await
bueno querida persona. Sí, pero esto es porque quiero utilizar MongoDB
como mi base de datos para aprender algo nuevo y no tenerlo en local.
Esto me permite que pueda hacer el request
y aun así cargue la página por si no tiene información para que no pase un error.
Utilizando postman pude agregar los datos a mi API
app.post('/characters', async (req, res) => {
try {
const character = await Character.create(req.body);
res.status(200).json(character);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
Con esto puedes mostrar los datos que tengas o hayas agregado.
app.get('/characters', async (req, res) => {
try {
// res.send('Characters');const characters = await Character.find({});
res.status(200).json(characters);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
En el update y delete podrás notar que tiene un ID, si recordamos lo que nos dijo el profesor. Es mala práctica y para nada recomendable poder eliminar/actualizar de golpe mucha información. Afortunadamente, MongoDB
solito te crea un id así que puedes buscarlo por ID y así haces lo que necesitas.
app.put('/characters/:id', async (req, res) => {
try {
const { id } = req.params;
const character = await Character.findByIdAndUpdate(id, req.body);
if (!character) {
return res.status(404).json({ message: 'Character Not Found' });
}
const updateCharacter = await Character.findById(id);
res.status(200).json(character);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
¡Oh no! Nos equivocamos y las skills de Billy Kid dice una tontería, vamos a cambiarlo con el update.
Ahora ya no dice la tontería que escribí y ahora tiene algo coherente.
app.delete('/characters/:id', async (req, res) => {
try {
const { id } = req.params;
const character = await Character.findByIdAndDelete(id, req.body);
if (!character) {
return res.status(404).json({ message: 'Character Not Found' });
}
res.status(200).json({ message: 'Character Deleted Successfully' });
} catch (err) {
res.status(500).json({ message: err.message });
}
});
Creamos a un personaje que no existe o que no tiene mucha información, asi que lo vamos a borrar.
¡Agarramos el id del personaje e hicimos un request de delete para borrarlo
¡Ya no existe!
Esto fue uno de mis primeros tutoriales y la verdad me gusto hacer todo este proceso.