Introducció a la pila MERN

Bloc

Introducció a la pila MERN

La pila MERN consta de MongoDB, Express, React / Redux i Node.js. Donada la popularitat de React al frontend i de Node.js al backend, la pila MERN és una de les piles de tecnologies més populars per construir una aplicació moderna d’una sola pàgina.

En aquest post, crearem un tot application que utilitza un RESTful INCENDI que també construirem al llarg d’aquest tutorial. Suposo que en teniu pocs coneixements javascript ( es6 ), reactjs i nodejs . Ja que farem servir node i sobre el nivell del mar , heu d’instal·lar-los al vostre ordinador, també hauríeu de tenir ja instal·lat el vostre editor de codi favorit.

Contingut de la taula

  • Node Configuració del servidor
  • Rutes
  • Models
  • Base de dades
  • Proves de foc
  • Creació del Frontend
  • Executant el Aplicació React
  • Creació dels components
  • Conclusió

Comencem per la configuració. Obriu el terminal i creeu un directori de fitxers nou en qualsevol ubicació convenient de la vostra màquina local, i podeu posar-li qualsevol nom.

mkdir Todo

comprar shiba inu binance

Introduïu aquest directori de fitxers

cd Todo

En aquesta etapa hem d'inicialitzar el nostre projecte amb un paquet . json fitxer que contindrà informació sobre la nostra aplicació i les dependències que la nostra aplicació ha d’executar. Podeu utilitzar npm init o yarn init i seguiu les instruccions o podeu utilitzar npm init -y per utilitzar els valors per defecte.

No us preocupeu pel contingut del meu fitxer package.json, perquè ja he instal·lat algunes dependències abans d'aquesta publicació. A mesura que avancem en la publicació, el vostre probablement acabarà semblant al meu.

Configuració del servidor de nodes

Per executar el nostre javascript codi al dorsal hem de fer girar un servidor que compilarà el nostre codi. Podem crear el nostre servidor de dues maneres: primer és utilitzar el mòdul http incorporat al node o fer ús d’express.

Per a aquest projecte utilitzarem express, que és un marc nodejs que gestiona moltes coses fora de la caixa per a nosaltres i en fa la creació RESTful INCENDI una mica més senzill. Per fer servir express, hem d’instal·lar-lo amb fil o sobre el nivell del mar .

yarn add express o npm install express

Creeu un fitxer index.js i escriviu-hi el codi següent i deseu-lo

const express = require('express'); require('dotenv').config(); const app = express(); const port = process.env.PORT || 5000; app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); app.use((req, res, next) => { res.send('Welcome to Express'); }); app.listen(port, () => { console.log(`Server running on port ${port}`) });

El codi següent ens ajuda a tractar problemes relacionats amb CORS que podríem trobar si intentem accedir a la nostra API des d’un altre dormain.

app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); });

És hora d’iniciar el nostre servidor per veure si funciona. Obriu el terminal al mateix directori que el fitxer index.js i escriviu

node index.js

on puc comprar vra crypto

Si tot va bé, ho hauríeu de veure Servidor que s’executa al port 5000 al terminal.

Rutes

Volem aconseguir tres coses amb la nostra aplicació de tot, que és crear una tasca, veure totes les tasques i eliminar una tasca completada. Per a això, hem de crear rutes que defineixin diversos punts finals dels quals dependrà l'aplicació todo. Per tant, anem a crear una carpeta rutes i creeu un fitxer foc . * _ js * _amb el següent codi.

const express = require ('express'); const router = express.Router(); router.get('/todos', (req, res, next) => { }); router.post('/todos', (req, res, next) => { }); router.delete('/todos/:id', (req, res, next) => { }) module.exports = router;

Models

Ara ve la part interessant, ja que la nostra aplicació en farà ús mongodb que és una base de dades noSql, hem de crear un model i un esquema. Els models es defineixen mitjançant la interfície d’esquema. L'esquema us permet definir els camps emmagatzemats a cada document juntament amb els seus requisits de validació i valors predeterminats. En essència, l’esquema és un pla de com es construirà la base de dades. A més, podeu definir mètodes d’ajuda estàtica i d’instàncies per facilitar el treball amb els vostres tipus de dades i també propietats virtuals que podeu utilitzar com qualsevol altre camp, però que no s’emmagatzemen a la base de dades.

Per crear un esquema i un model que hem d’instal·lar mangosta que és un paquet de nodes que facilita el treball amb mongodb.

yarn add mongoose o npm install mongoose

Creeu una carpeta nova al directori arrel i nomeneu-la models, al seu interior creeu un fitxer i nomeneu-lo tot . js amb el següent codi.

const mongoose = require('mongoose'); const Schema = mongoose.Schema; //create schema for todo const TodoSchema = new Schema({ action: { type: String, required: [true, 'The todo text field is required'] } }) //create model for todo const Todo = mongoose.model('todo', TodoSchema); module.exports = Todo;

Un cop creat el nostre model, hem d’actualitzar les nostres rutes per fer ús del nou model.

const express = require ('express'); const router = express.Router(); const Todo = require('../models/todo'); router.get('/todos', (req, res, next) => { //this will return all the data, exposing only the id and action field to the client Todo.find({}, 'action') .then(data => res.json(data)) .catch(next) }); router.post('/todos', (req, res, next) => { if(req.body.action){ Todo.create(req.body) .then(data => res.json(data)) .catch(next) }else { res.json({ error: 'The input field is empty' }) } }); router.delete('/todos/:id', (req, res, next) => { Todo.findOneAndDelete({'_id': req.params.id}) .then(data => res.json(data)) .catch(next) }) module.exports = router;

Base de dades

Necessitem un base de dades on emmagatzemarem les nostres dades. Per a això farem ús de mlab. Segueix això doc per començar amb mlab. Després de configurar el vostre base de dades cal actualitzar el fitxer index.js amb el següent codi

const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const routes = require('./routes/api'); const path = require('path'); require('dotenv').config(); const app = express(); const port = process.env.PORT || 5000; //connect to the database mongoose.connect(process.env.DB, { useNewUrlParser: true }) .then(() => console.log(`Database connected successfully`)) .catch(err => console.log(err)); //since mongoose promise is depreciated, we overide it with node's promise mongoose.Promise = global.Promise; app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); app.use(bodyParser.json()); app.use('/api', routes); app.use((err, req, res, next) => { console.log(err); next(); }); app.listen(port, () => { console.log(`Server running on port ${port}`) });

Al codi anterior hem fet ús de procés . env per accedir a la variable d’entorn que crearem ara. Creeu un fitxer al directori arrel amb el nom * _. Env * _i escriviu

DB = 'mongodb: //: @ ds039950.mlab.com: 39950 / tot'
Assegureu-vos que utilitzeu la vostra pròpia URL mongodb obtinguda de mlab després de crear la vostra base de dades i l'usuari. Substituïu ** pel nom d'usuari i ** per la contrasenya de l'usuari que heu creat. Per treballar amb la variable d'entorn hem d'instal·lar un paquet de node anomenat dotenv que ens assegura que tinguem accés a la variable d 'entorn emmagatzemada a .env dossier.

yarn add dotenv o npm install dotenv

A continuació, ho requerim i el configurem al nostre índex . js dossier

require('dotenv').config()

La raó per la qual tinc la decisió d’adoptar mitjançant la variable d’entorn al nostre projecte és que podem ocultar tota la informació sensible del nostre sistema de versions, de manera que és més per motius de seguretat.

Proves de foc

Aquesta és la part que comencem a provar per assegurar-nos que la nostra API RESTful funciona. Com que el nostre frontal encara no està preparat, podem fer ús d’alguns clients de desenvolupament d’API per provar el nostre codi. Us recomano que feu servir Postman o Insomnia; si hi ha algun altre client, encara podeu fer-ne ús. Inicieu el servidor amb node index.js i obriu el client, creeu un mètode get i aneu a http: // localhost: 5000 / api / tots Haureu de provar tots els punts finals API i assegurar-vos que funcionin. Per als punts finals que requereixen un cos, hauríeu d'enviar json amb els camps necessaris, ja que és el que configurem al nostre codi.

415 API web de tipus de suports no compatibles

Creació del Frontend

Com que hem acabat amb la funcionalitat que volem de la nostra API, és hora de crear una interfície perquè el client pugui interactuar amb la API. Per començar amb el frontal de l'aplicació de tot, utilitzarem l'aplicació create react per bastir la nostra aplicació, de manera que no ens haurem de preocupar de configurar-la. webpack i babel des de zero. Al mateix directori arrel que el vostre codi principal, que és el directori de tot, executeu create-react-app client o npx create-react-app client si no voleu instal·lar create-react-app globalment a l'ordinador. Això crearà una nova carpeta al directori arrel anomenada client, on escriurem tot el nostre codi de reacció.

Executant l'aplicació React

Després de crear el fitxer aplicació react , el següent és veure si l’aplicació està ben connectada i també funciona. Però abans de provar-ho, primer hem de realitzar algunes accions.

  • Instal·la simultàniament com a dependència de dev, utilitzant yarn add concurrently --dev o npm install concurrently --save-dev. L'avantatge de simultàniament és que ens permet executar més d'una ordre simultàniament des de la mateixa finestra de terminal.
  • Instal·la nodemon com a dependència de dev utilitzant yarn add nodemon --dev o npm install nodemon --save-dev. Utilitzarem nodemon per fer girar el nostre servidor i controlar-lo també, de manera que si hi ha algun canvi al nostre servidor, nodemon el reiniciarà automàticament per nosaltres.
  • Obriu el fitxer package.json a la carpeta arrel del fitxer projecte d'aplicacions mern i enganxeu el codi següent
{ 'name': 'todo', 'version': '1.0.0', 'description': 'building todo app using mongodb, express, react and nodejs', 'main': 'index.js', 'scripts': { 'start': 'node index.js', 'start-watch': 'nodemon index.js', 'dev': 'concurrently 'yarn run start-watch' 'cd client && yarn start'' }, 'author': 'Ojini Jude', 'license': 'MIT', 'dependencies': { 'body-parser': '^1.18.3', 'dotenv': '^6.1.0', 'express': '^4.16.4', 'mongoose': '^5.3.6' }, 'devDependencies': { 'concurrently': '^4.0.1', 'nodemon': '^1.18.4' } }
  • Introduïu a la carpeta client i, a continuació, localitzeu el fitxer package.json i afegiu-hi el parell de valors de claus que hi ha a sota. Aquesta configuració del servidor intermediari al nostre fitxer package.json ens permetrà fer trucades API sense haver d’escriure l’URL completa, només / api / todos obtindrà tots els nostres tots
'proxy': 'http://localhost:5000'

Obriu el terminal i executeu npm run dev i assegureu-vos que esteu al directori de tot i no al directori de clients. Voila !, l'aplicació hauria d'estar oberta i funcionant localhost: 3000 .

Creació dels components

Una de les coses belles de reaccionar és que fa ús de components, que són reutilitzables i també fan que els codis siguin modulars. Per a la nostra aplicació de tot, crearem dos components d'estat i un component sense estat. Dins del vostre src carpeta crea una altra carpeta anomenada components i al seu interior creeu tres fitxers Entrada . js , LlistaTodo . js i tot . js .

Obriu el fitxer Input.js i enganxeu el següent

import React, { Component } from 'react'; import axios from 'axios'; class Input extends Component { state = { action: '' } addTodo = () => { const task = {action: this.state.action} if(task.action && task.action.length > 0){ axios.post('/api/todos', task) .then(res => { if(res.data){ this.props.getTodos(); this.setState({action: ''}) } }) .catch(err => console.log(err)) }else { console.log('input field required') } } handleChange = (e) => { this.setState({ action: e.target.value }) } render() { let { action } = this.state; return ( add todo ) } } export default Input

Per fer ús d'axios, que és un client HTTP basat en promeses per al navegador i node.js, heu de cd al vostre client des del terminal i executar yarn add axios o npm install axios
Després, obriu el fitxer ListTodo.js i enganxeu el codi següent

import React from 'react'; const ListTodo = ({ todos, deleteTodo }) => { return ( {todos &&todos.length > 0 ?(todos.map(todo => {return ( deleteTodo(todo._id)}>{todo.action})})):(* No todo(s) left )} ) } export default ListTodo

A continuació, al fitxer Todo.js escriviu el següent codi

import React, {Component} from 'react'; import axios from 'axios'; import Input from './Input'; import ListTodo from './ListTodo'; class Todo extends Component { state = { todos: [] } componentDidMount(){ this.getTodos(); } getTodos = () => { axios.get('/api/todos') .then(res => { if(res.data){ this.setState({ todos: res.data }) } }) .catch(err => console.log(err)) } deleteTodo = (id) => { axios.delete(`/api/todos/${id}`) .then(res => { if(res.data){ this.getTodos() } }) .catch(err => console.log(err)) } render() { let { todos } = this.state; return( # My Todo(s) ) } } export default Todo;

Hem de fer poc ajust al nostre codi de reacció, suprimim el logotip i ajustem el nostre Aplicació . js per semblar així.

import React from 'react'; import Todo from './components/Todo'; import './App.css'; const App = () => { return ( ); } export default App;

A continuació, enganxem el següent codi al nostre fitxer App.css.

.App { text-align: center; font-size: calc(10px + 2vmin); width: 60%; margin-left: auto; margin-right: auto; } input { height: 40px; width: 50%; border: none; border-bottom: 2px #101113 solid; background: none; font-size: 1.5rem; color: #787a80; } input:focus { outline: none; } button { width: 25%; height: 45px; border: none; margin-left: 10px; font-size: 25px; background: #101113; border-radius: 5px; color: #787a80; cursor: pointer; } button:focus { outline: none; } ul { list-style: none; text-align: left; padding: 15px; background: #171a1f; border-radius: 5px; } li { padding: 15px; font-size: 1.5rem; margin-bottom: 15px; background: #282c34; border-radius: 5px; overflow-wrap: break-word; cursor: pointer; } @media only screen and (min-width: 300px) { .App { width: 80%; } input { width: 100% } button { width: 100%; margin-top: 15px; margin-left: 0; } } @media only screen and (min-width: 640px) { .App { width: 60%; } input { width: 50%; } button { width: 30%; margin-left: 10px; margin-top: 0; } }

També al nostre fitxer index.css hi escrivim el següent estil.

body { margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box; background-color: #282c34; color: #787a80; } code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; }

Suposant que no ens trobem amb errors quan vam desar el codi, hauríem de tenir una aplicació de treball pràctica. Això té la funcionalitat bàsica que hem comentat anteriorment, que és crear una tasca, suprimir una tasca i visualitzar tota la vostra tasca.

Conclusió

Un viatge de mil quilòmetres, comença amb un pas. Crec que heu fet aquest pas audaç cap a l’aprenentatge i la comprensió Pila MERN . Mentrestant tinc una petita tasca per a vosaltres. si us n’heu adonat, la nostra aplicació de tot no té funcions d’edició, així que vull que feu dues coses; el primer és escriure el codi API per implementar l’actualització de les dades anteriors a la base de dades i, en segon lloc, afegir dos botons a cada tasca, editar i suprimir el botó, de manera que, com a usuari, faig clic al botó d’edició, apareixerà una finestra emergent edito aquesta tasca i deso. Quan hàgiu acabat, no dubteu a compartir el vostre enllaç de github al comentari, també si teniu algun problema, també ho discutirem.

#mongodb #express #reactjs # node-js

utilitat de reparació de bases de dades sage 50

scotch.io

Introducció a la pila MERN

La pila MERN consta de MongoDB, Express, React / Redux i Node.js. Donada la popularitat de React al frontend i de Node.js al backend, la pila MERN és una de les piles de tecnologies més populars per construir una aplicació moderna d’una sola pàgina.