SvelteJS / Sapper

1. Samm: Projekti seadistamine ja installatsioon

  1. 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

  1. 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

  1. 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

  1. Loo kaust src/routes/auth ja fail src/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

  1. 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

  1. Käivitage rakendus ja testige registreerimisprotsessi.
  2. Lisage kliendipoolne vormi valideerimine (parooli pikkuse kontroll, kasutajanime kordumatuse kontroll jms).
  3. Kontrollige, et sessioonid töötavad ja kasutaja andmed salvestatakse õigesti.

Lisalähenemised

  • Rakendage sisselogimise ja väljalogimise ruuterid (login ja logout).
  • 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.

GITHUB

PIVOTAL TRACKER