SvelteJS / Sapper
1. Samm: Projekti seadistamine ja installatsioon
- Uue Sapperi projekti initsialiseerimine:
- Käivitage käsk:
npx degit "sveltejs/sapper-template#rollup" my-sapper-app
cd my-sapper-app
npm install
Rakenduse käivitamine kontrollimiseks:
- Käivitage käsk:
npm run dev

2. Samm: API seadistamine serveriga suhtlemiseks
- Loo fail
src/api.js
:- See fail sisaldab funktsioone HTTP-päringute saatmiseks:
const base = 'https://js.kristjankivikangur21.thkit.ee/';
async function send({ method, path, data, token }) {
const fetch = process.browser ? window.fetch : require('node-fetch').default;
const opts = { method, headers: {} };
if (data) {
opts.headers['Content-Type'] = 'application/json';
opts.body = JSON.stringify(data);
}
if (token) {
opts.headers['Authorization'] = `Bearer ${token}`;
}
console.log(`${base}/${path}`)
console.log(opts)
return fetch(`${base}/${path}`, opts)
.then((r) => r.text())
.then((json) => {
try {
return JSON.parse(json);
} catch (err) {
return json;
}
});
}
export function get(path, token) {
return send({ method: 'GET', path, token });
}
export function del(path, token) {
return send({ method: 'DELETE', path, token });
}
export function post(path, data, token) {
return send({ method: 'POST', path, data, token });
}
export function put(path, data, token) {
return send({ method: 'PUT', path, data, token });
}
3. Samm: Serveripoolse registreerimise töötlemise seadistamine
- Nõutavate paketide installatsioon:
- Käivitage käsk:
npm install polka compression express-session session-file-store body-parser
Faili src/server.js
redigeerimine:
- Konfigureerige server sessioonide toetamiseks:
import sirv from 'sirv';
import polka from 'polka';
import compression from 'compression';
import * as sapper from '@sapper/server';
import session from 'express-session';
import sessionFileStore from 'session-file-store'; // npm install session-file-store
const { json } = require('body-parser');
const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';
const FileStore = new sessionFileStore(session);
polka() // You can also use Express
.use(
compression({ threshold: 0 }),
json(),
session({
secret: 'markiz12', //suvaline EI tohi githubi panna
resave: true,
saveUninitialized: true,
cookie: {
maxAge: 31536000
},
store: new FileStore({
path: `.sessions`
})
}),
sirv('static', { dev }),
sapper.middleware({
session: req => ({
user: req.session && req.session.user,
token: req.session && req.session.token
})
})
)
.listen(PORT, err => {
if (err) console.log('error', err);
}); //can register
4. Samm: Registreerimisruuteri seadistamine
- Loo kaust
src/routes/auth
ja failsrc/routes/auth/register.js
:- Konfigureerige POST-päringu töötleja registreerimiseks:
import * as api from 'api.js';
export function post(req, res) {
const user = req.body;
api.post('users', user).then(response=>{
if (response.user) {
req.session.user = response.user;
}
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
});
}
5. Samm: Klientpoolse registreerimisvormi loomine
- Loo fail
src/routes/register.svelte
:- Rakenda komponent registreerimisvormi kuvamiseks:
<script>
import { goto, stores } from '@sapper/app';
import { post } from 'utils.js';
const { session } = stores();
let username = '';
let name = '';
let password = '';
let error = null;
async function submit(event) {
const response = await post(`auth/register`, { username, name, password });
// TODO handle network errors
error = response.error;
if (response.user) {
$session.user = response.user;
goto('/');
}
}
</script>
<svelte:head>
<title>Sign up • Conduit</title>
</svelte:head>
<div class="auth-page">
<div class="container page">
<div class="row">
<div class="col-md-6 offset-md-3 col-xs-12">
<h1 class="text-xs-center">Sign up</h1>
<p class="text-xs-center">
<a href="/login">Have an account?</a>
</p>
{#if error}
<div class="alert alert-danger" role="alert">{error}</div>
{/if}
<form on:submit|preventDefault={submit}>
<fieldset class="form-group">
<input class="form-control form-control-lg" type="text" required placeholder="Your Name" bind:value={username}>
</fieldset>
<fieldset class="form-group">
<input class="form-control form-control-lg" type="text" required placeholder="Your Username" bind:value={name}>
</fieldset>
<fieldset class="form-group">
<input class="form-control form-control-lg" type="password" required placeholder="Password" bind:value={password}>
{#if password.length > 1 && password.length < 6}<sup><div class="alert alert-danger" role="alert">Password too short</div></sup>{/if}
</fieldset>
<button class="btn btn-lg btn-primary pull-xs-right" disabled="{password.length <6}">
Sign up
</button>
</form>
</div>
</div>
</div>
</div>
6. Samm: Testimine ja silumine
- Käivitage rakendus ja testige registreerimisprotsessi.
- Lisage kliendipoolne vormi valideerimine (parooli pikkuse kontroll, kasutajanime kordumatuse kontroll jms).
- Kontrollige, et sessioonid töötavad ja kasutaja andmed salvestatakse õigesti.
Lisalähenemised
- Rakendage sisselogimise ja väljalogimise ruuterid (
login
jalogout
). - Konfigureerige volitatud kasutajate jaoks suunatud ruuterid.
- Lisage vormide välimuse parandamiseks stiilid.
Nende sammude abil saate luua rakenduse põhilise kasutajate registreerimise ja haldamise funktsionaalsusega.
