A. Server side rendering
A.1. Dominando el "request - response"
A.2. El trabajo de un servidor
A.3. Entregar s贸lo lo necesario
A.4. El mito del SPA(single page app)
A.5. Servidor http con s贸lo NodeJS
A.6. Un cl谩sico: ExpressJS
const faker = require('@faker-js/faker').faker // commonjs | |
const PrismaClient = require('@prisma/client').PrismaClient | |
const prisma = new PrismaClient() | |
const getProduct = ()=> { | |
const name = faker.commerce.productName() | |
return ({ | |
slug:faker.helpers.slugify(name), | |
name, |
import { useLoaderData, useFetcher } from 'remix'; | |
import type { LoaderFunction, ActionFunction } from 'remix'; | |
import { useEffect, useState } from 'react'; | |
const videoIds = [ | |
'57IcpS8x7Ig', | |
'vjYRTMLoMfs', | |
'jkNzbkoNFm0', | |
'43KpZYk8_2E', | |
'I6eZDxVKj08', |
name: Fly Deploy | |
on: | |
push: | |
branches: | |
- master | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
jobs: | |
deploy: | |
name: Deploy app |
import { initializeApp } from 'firebase/app'; | |
import { | |
getAuth, | |
signInWithEmailAndPassword, | |
onAuthStateChanged, | |
signOut, | |
} from 'firebase/auth'; | |
const firebaseConfig = { | |
apiKey: '', |
import './App.css'; | |
function App() { | |
const handleSubmit = async (event) => { | |
event.preventDefault(); | |
const { target } = event; | |
const form = { | |
name: target.name.value, | |
email: target.email.value, |
import mongoose from 'mongoose'; | |
// import for model registration | |
import Video from '~/db/models/Video'; | |
import Course from '~/db/models/Course'; | |
import User from '~/db/models/User'; | |
import Offer from '~/db/models/Offer'; | |
import Module from '~/db/models/Module'; | |
import Order from '~/db/models/Order'; | |
import { getSession } from '~/sessions'; |
import { json, LoaderFunction } from "remix"; | |
import Stripe from 'stripe' | |
import dbConnection from "~/db/mongoose.server"; | |
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY) | |
export async function action({ request }): LoaderFunction { | |
if (request.method !== 'POST') return; | |
const webhookSecret = process.env.STRIPE_SIGN; |
const conekta = require("conekta"); | |
//conekta.api_key = process.env.ENV === 'production' ? process.env.CONEKTA_KEY : process.env.CONEKTA_KEY_DEV | |
conekta.api_key = process.env.CONEKTA_KEY; | |
conekta.api_version = "2.0.0"; | |
conekta.locale = "es"; | |
controller.pay = (req, res) => { | |
//conekta payment | |
const { conektaToken, plazo, application, cupon } = req.body; |
apiVersion: networking.k8s.io/v1beta1 | |
kind: Ingress | |
metadata: | |
name: ingress-service | |
annotations: | |
kubernetes.io/ingress.class: 'nginx' | |
nginx.ingress.kubernetes.io/use-regex: 'true' | |
nginx.ingress.kubernetes.io/rewrite-target: /$1 | |
spec: | |
rules: |