Dylematy cyberbezpieczeństwa: Wycieki danych
Przedświąteczna gorączka trwa w najlepsze. W poszukiwaniu prezentów dla najbliższych ludzie coraz chętniej "szturmują" sklepy internetowe
Remix to w pełni webowy framework skupiający się na podstawach webowych i nowoczesnym UX.
Tak, to kolejny JS frameworka, ale wystarczy trzymać się go nieco dłużej, ponieważ ten framework jest tworzony przez Michael Jackson i Ryan Florence spryciarze stojący za Router React. Mam nadzieję, że to przyciągnęło twoją uwagę, więc zobaczmy, co jest dobrego w Remix framework.

Remix jest frameworkiem po stronie serwera zbudowanym na bazie Web Fetch API i Router ReactKażda trasa w remiksie ma trzy podstawowe eksporty a ładowarkai działanie i domyślny składnik eksport. The ładowarka zostanie wywołana na serwerze przed renderowaniem w celu dostarczenia danych do trasy, funkcja działanie jest odpowiedzialna za mutację danych, domyślnym eksportem jest komponent, który będzie renderowany na tej trasie. Funkcja ładowarka i działanie są uruchamiane tylko po stronie serwera i muszą zwracać wartość Odpowiedź obiekt domyślny Eksport jest uruchamiany zarówno po stronie serwera, jak i klienta.
Aby zainicjować nowy Remix projekt:
npx create-remix@latest
WAŻNE: Po wyświetleniu monitu wybierz "Tylko podstawy", a następnie "Remix App Server".
cd [jakkolwiek nazwałeś projekt]
npm run dev
```
Otwórz http://localhost:3000. create-remix otrzymasz szablon startowy o następującej strukturze:

aplikacja folder będzie zawierał wszystkie trasy aplikacji i kod.app/entry.client.jsx jest pierwszym fragmentem kodu, który jest uruchamiany w przeglądarce i służy do hydrat komponenty React.app/entry.server.jsx to pierwszy fragment kodu, który jest uruchamiany, gdy żądanie trafia na serwer, ten plik renderuje naszą aplikację React na ciąg / strumień i wysyła go jako naszą odpowiedź do klienta.app/root.jsx to miejsce, do którego trafia komponent główny.app/routes/ to miejsce, do którego trafią wszystkie moduły tras, remix używa routingu opartego na systemie plików.publiczny to folder, w którym znajdują się zasoby statyczne (obrazy/czcionki/etc).remix.config.js to miejsce, w którym można ustawić konfigurację remiksu.Sprawdźmy login.jsx przykład trasy wewnątrz aplikacji Remix:
import { redirect, json, Form, useActionData, useTransition } from 'remix';
import { isLoggedIn, verifyLogin } from '../auth';
export const loader = async ({ request }) => {
if (await isLoggedIn(request)) {
return redirect('/dashboard');
}
return json({ success: true });
};
export const action = async ({ request }) => {
const formData = await request.formData();
const values = {
email: formData.get('email') ?? '',
password: formData.get('password') ?? '',
};
const errors = await verifyLogin(values);
if (errors) {
return json({ errors }, { status: 400 });
}
return redirect('/dashboard');
};
export default function LoginRoute() {
const actionData = useActionData();
const transition = useTransition();
const isSubmitting = transition.state === 'submitting';
return (
Email
{actionData?.errors?.email &&
{actionData.errors.email}
}
<div>
<label htmlFor="password">Password</label>
<input id="password" name="password" type="password" />
{actionData?.errors?.password && (
<div>{actionData.errors.password}</div>
)}
</div>
<div>
<button type="submit" disabled={isSubmitting}>
{`Login ${isSubmitting ? '...' : ''}`}
</button>
</div>
</Form>
);
}
```
Pierwszą rzeczą, która się tutaj dzieje, jest ładowarka funkcja sprawdzająca, czy użytkownik jest już zalogowany przy użyciu atrybutu isLoggedIn funkcja i będzie przekierowanie go do /dashboard trasa, jeśli nie, po prostu zwróci { success: true } następnie renderowana jest strona logowania.
The LoginRoute renderuje formularz z danymi wejściowymi e-mail i hasła oraz przyciskiem przesyłania, jak widać, nie ma stan zmienne ani onSubmit w naszym komponencie, dzieje się tak dlatego, że w remiksie każda trasa może eksportować atrybut działanie i gdy formularz jest przesyłany z POST zostanie wywołana akcja, która obsłuży to zdarzenie.
Gdy formularz zostanie przesłany działanie funkcja uzyska wartość
FormData z Prośba obiekt const formData = await request.formData()wtedy konstruujemy wartości z adresem e-mail i hasłem, obiekt formData.get('email') będzie szukać pierwszego pasującego pola w naszym formularzu z rozszerzeniem name="email" i zwrócić jego wartość. Sprawdzamy, czy dane uwierzytelniające są poprawne za pomocą funkcji verifyLogin można użyć dowolnej ulubionej biblioteki walidacji schematów JS i wykonać funkcję pobieranie do niestandardowego backendu, aby sprawdzić, czy dane logowania są poprawne, jeśli tak, to przekierowanie użytkownika do /dashboard trasa, w przeciwnym razie zwracamy json odpowiedź z obiektem błędów i Kod statusu HTTP 400w useActionData hak zwróci ten obiekt błędów, jeśli taki istnieje, a my warunkowo wyrenderujemy komunikat o błędzie, jak poniżej {actionData?.errors?.email && <div>{actionData.errors.email}</div>}.
The useTransition hook mówi nam wszystko o stanie przejścia strony, przy czym isSubmitting zmienna sprawdzamy, kiedy ma miejsce zgłoszenie, jeśli takie istnieje, będziemy wyłączenie przycisk przesyłania i pokaż Login.... zamiast LogowanieZamiast tego możemy również wyświetlić użytkownikowi spinner ładowania lub inne wskazanie.
The json jest tylko skrótem do tworzenia application/json obiekty odpowiedzi. The useLoaderData hook zwraca przeanalizowane dane JSON z trasy ładowarkaw useActionData zwraca trasę działanie przeanalizowane dane.
Każda trasa może również eksportować meta funkcja odpowiedzialna za ustawienie metatagów dla dokumentu Html, w ten sposób można ustawić znacznik tytuł oraz opis dla każdej trasy i dodać dowolne metatagi Open Graph lub inne.
export const meta = () => {
const title = 'Moja niesamowita strona';
const description = 'Super niesamowita strona';
return {
charset: 'utf-8',
title,
description,
keywords: 'Remix,Awesome',
'twitter:image': 'https://awesome-page.com/awesome.png',
'twitter:card': 'summarylargeimage',
'twitter:creator': '@awesome',
'twitter:site': '@awesome',
'twitter:title': tytuł,
'twitter:description': description,
};
};
export default function AwesomeRoute() {
return
Awesome Route
;
}
```
Dotarliśmy tylko do wierzchołka góry lodowej na temat Remix, jest o wiele więcej do poznania, oto kilka przydatnych linków:
Wspaniałe w Remixie jest to, że stając się lepszym z nim, będziesz lepszy w podstawach sieci, jak zauważyłeś wiele linków do tego artykułu wskazuje na Dokumenty MozilliTo właśnie oznacza, że Remix koncentruje się na podstawach sieciowych, wykorzystuje interfejsy API sieci Web, takie jak obiekt Response i Request, aby zapewnić użytkownikom świetny UX, a ponadto nadal możesz korzystać ze wszystkich swoich zwykłych technik i ulubionych bibliotek React.
W tym artykule nie omówiliśmy wszystkich wspaniałych funkcji oferowanych przez Remix, takich jak Zagnieżdżone trasy, Granice błędu, Remix Stacks Niemniej jednak ten artykuł powinien dać ci dobre wyobrażenie o filozofii stojącej za Remix.
