Horváth Győző
Egyetemi adjunktus
1117 Budapest, Pázmány Péter sétány 1/c., 2.420-as szoba
Tel: (1) 372-2500/1816
horvath.gyozo@inf.elte.hu
Hibabejelentő oldal készítése laborokba.
Szerepkörökhöz tartozó használati esetek.
Használati eset diagram.
nomnoml/ArgoUML
Az egyes használati esetek részletes folyamatai.
UML Activity Diagram.
nomnoml/ArgoUML
Az egyes oldalak egymáshoz viszonyított kapcsolatai.
Tipikusan hierarchikus, ritkán topografikus kapcsolati rendszer.
Szöveges/Grafikus megadás
Publikus:
- Főoldal
- Help
- Login
Bejelentő
- Főoldal
- Help
- Login/Logout
- Hibalista
+ új hiba
+ hiba megtekintése
* megjegyzés hozzáfűzése
Operátor
- Főoldal
- Help
- Login/Logout
- Hibalista
+ hiba megtekintése
* hiba módosítása
* megjegyzés hozzáfűzése
Az egyes oldalak elérhetősége.
Szemantikus URI-k.
GET /
: főoldalGET /help
: leírás a használatrólGET /login
: bejelentkező oldalPOST /login
: bejelentkezési adatok felküldéseGET /errors/list
: saját hibalista oldalGET /errors/new
: új hiba felvitelePOST /errors/new
: új hiba felvitele, adatok küldéseGET /errors/:id
: hiba adataiPOST /errors/:id/comment
: új megjegyzésGET /operator/list
: operátor felület, hibalistaGET /operator/errors/:id
: operátor felület,POST /operator/errors/:id/status
: státuszállításAz egyes oldalak körülbelüli elrendezése.
Kölcsönös hatással az adattartalomra és funkciókra.
Drótvázkészítés, mockup.
Lumzy/Táblázatkezelő/Prezentációkészítő/Befotózott szabadkézi rajz
Az alkalmazásban használatos adatok struktúrája.
Osztály- vagy objektumdiagram
nomnoml/ArgoUML
Az adatok tárolásához szükséges struktúra.
Táblaleírások, mezőnkénti kifejtéssel.
Függ a választott adatbázis-kezelő rendszertől.
nomnoml/ArgoUML
Az alkalmazásban használt állapotátmenetek definiálása.
nomnoml/ArgoUML
Drótvázrajzok alapján.
Háttérképek, elrendezések, színek, stb.
Kép (GIMP, Photoshop)
--> Statikus oldalvázak, sablonok.
Kihagyható
CSS keretrendszer megfelelő kinézetet biztosít.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>Hibabejelentő</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/sandstone/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Hibabejelentő</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<!-- <ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul> -->
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Login</a></li>
<li><a href="#">About</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div class="page-header">
<h1>Hibabejelentés az IK-n</h1>
</div>
<p>
Blabla blabla blabla
</p>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>Hibabejelentő</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/sandstone/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Hibabejelentő</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<!-- <ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul> -->
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Kilépés</a></li>
<li><a href="#">About</a></li>
</ul>
<p class="navbar-text navbar-right">Üdv, XY!</p>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div class="alert alert-dismissible alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
Sikeres hibafelvitel!
</div>
<div class="page-header">
<h1>Bejelentett hibáim</h1>
</div>
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>Időpont</th>
<th>Státusz</th>
<th>Helyszín</th>
<th>Leírás</th>
</tr>
</thead>
<tbody>
<tr>
<td>2015.09.16. 13:58</td>
<td><span class="label label-danger">Új</span></td>
<td>PC6 15. gép</td>
<td>Rossz billentyűzet <span class="badge">4</span></td>
</tr>
<tr>
<td>2015.09.16. 13:58</td>
<td><span class="label label-info">Folyamatban</span></td>
<td>PC6 15. gép</td>
<td>Rossz billentyűzet <span class="badge">4</span></td>
</tr>
<tr>
<td>2015.09.16. 13:58</td>
<td><span class="label label-success">Megoldva</span></td>
<td>PC6 15. gép</td>
<td>Rossz billentyűzet <span class="badge">4</span></td>
</tr>
</tbody>
</table>
<p><a href="#" class="btn btn-default">Új hiba felvitele</a></p>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>Hibabejelentő</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/sandstone/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Hibabejelentő</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<!-- <ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul> -->
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Login</a></li>
<li><a href="#">About</a></li>
</ul>
<p class="navbar-text navbar-right">Üdv, XY!</p>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div class="page-header">
<h1>Új hiba bejelentése</h1>
</div>
<form class="form-horizontal">
<fieldset>
<div class="form-group has-error">
<label for="helyszin" class="col-lg-2 control-label">Helyszín</label>
<div class="col-lg-10">
<input class="form-control" id="helyszin" placeholder="pl. PC6, Lovarda, 2. emeleti folyosó..." type="text">
<span class="help-block">Kötelező</span>
</div>
</div>
<div class="form-group">
<label for="leiras" class="col-lg-2 control-label">Leírás</label>
<div class="col-lg-10">
<textarea class="form-control" rows="3" id="leiras"></textarea>
<span class="help-block">Meg kell adni a helyszínt, ha pedig konkrét géppel van probléma, akkor azt is.</span>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button type="reset" class="btn btn-default">Cancel</button>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
wget https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/sandstone/bootstrap.min.css
npm install bower -g
bower
parancsbower install packagename
bower init
--> bower.json
.bowerrc
{
"directory": "lib/"
}
req.params.valtozo
// GET /user/adam
app.get('/user/:name', function (req, res) {
var name = req.params.name; // => adam
//...
});
//Paraméter middleware
router.param('name', function (req, res, next, name, paramName) {
console.log('paramName' + ': ' + name);
next();
})
app.get('/user/:name', function (req, res) {
var name = req.params.name;
//...
});
req.query.valtozo
// GET /users?id=42&ref=45428174v24t2
app.get('/users', function (req, res) {
console.log(req.query);
var id = req.query.id;
var ref = req.query.ref;
})
req.body.valtozo
npm install body-parser --save
var bodyParser = require('body-parser');
//...
app.use(bodyParser.urlencoded({ extended: false }));
//...
// POST /users
app.post('/users', function(req, res) {
var firstName = req.body.firstname;
var lastName = req.body.lastname;
//...
});
POST-REDIRECT-GET módszer
express-validator
modul használata
var expressValidator = require('express-validator');
app.use(express.bodyParser());
app.use(expressValidator());
app.post('/', function(req, res) {
req.checkBody('age', 'Invalid age').notEmpty().isInt();
var errors = req.validationErrors();
if (errors) {
//hibakezelés
} else {
//helyes ág
}
});
res.sendFile()
)static
middleware-reljs
és css
mappa az alkalmazásspecifikus dolgoknak, a külső függőségek helye egy lib
mappán belül)static
middleware hatásköre alól, újra végpontok szolgálják ki. Az egyes nézetek a views
mappán belül vannak, a belső mappastruktúra tükrözheti a végpontok neveit.views/layout.hbs
).