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
Angolul: Model-View-Controller (MVC)
METÓDUS ERŐFORRÁS VERZIÓ
FEJLÉC: ÉRTÉK
FEJLÉC: ÉRTÉK
FEJLÉC: ÉRTÉK
ÜZENETTEST (opcionális)
Minimális:
GET /index.html HTTP/1.1
Host: webprogramozas.inf.elte.hu
Konkrét:
GET / HTTP/1.1
Host: webprogramozas.inf.elte.hu
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: hu-hu,hu;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: __utma=159741371.1255432553.1308299517.1308299517.1308299517.1; __utma=32143338.2145495546.1326532899.1361177845.1362134456.25; __utmz=32143338.1361177845.24.12.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)
Connection: keep-alive
GET: Megadott erőforrás letöltésePOST: Feldolgozandó adat felküldéseHEAD: ld. GET, de csak a válasz fejléceket kéri lePUT: Feltölt a megadott erőforrástDELETE: Törli a megadott erőforrástTRACE: Visszaküldi a kapott kéréstOPTIONS: A szerver által támogatott HTTP metódusok listájaCONNECT: Kérést transzparens tunnellé alakítja (SSL-hez kell)VERZIÓ STÁTUSZKÓD INDOKLÁS
FEJLÉC: ÉRTÉK
FEJLÉC: ÉRTÉK
FEJLÉC: ÉRTÉK
ÜZENETTEST (opcionális)
HTTP/1.1 200 OK
Date: Wed, 03 Apr 2013 07:11:56 GMT
Server: Apache/2.2.10 (Linux/SUSE)
Last-Modified: Wed, 20 Feb 2013 08:39:44 GMT
ETag: "fe8438-6d6-4d623e65e9400"
Accept-Ranges: bytes
Content-Length: 1750
Content-Type: text/html
<!DOCTYPE html>
<html>
...
</html>
1xx: Informatív (kérés megkapva)2xx: Siker (kérés megérkezett, elfogadva)
200 OK3xx: Átirányítás (további műveletre van szükség)4xx: Kliens hiba (kérés hibás, nem teljesíthető)
404 Not found404 Nem található5xx: Szerver hiba (nem tudja teljesíteni a kérést)
500 Internal Server Errornode parancs (interaktív shell)node fájlnévnpm parancsnode_modules könyvtárnpm init: projektleíró fájl (package.json) készítésenpm install package: telepítés a projekten belülrenpm install -g package: globálisan elérhető programok telepítésenpm install package --save: telepítés + bejegyzés a projektleíró fájlba mint függőségnpm install package --save-dev: telepítés + fejlesztői függőség (pl. teszteléshez szükséges program)require: importálásmodule.exports: exportálás//Modul: math.js
function add(a, b) {
return a + b;
}
module.exports = add;
//Főprogram: index.js
var add = require('./math');
console.log(add(2, 3));
// math.js
module.exports = {
add: function (a, b) { return a + b; },
multiply: function (a, b) { return a * b; },
};
// index.js
var math = require('./math');
console.log(math.add(2, 3));
// VAGY
var multiply = require('./math').multiply;
console.log(multiply(2, 3));
npm install express --savenpm install express-generator -g (haladó)var http = require('http');
var port = process.env.PORT || 3000;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello browser!\n');
}).listen(port);
var express = require('express');
var app = express();
var port = process.env.PORT || 3000;
app.listen(port);
var express = require('express');
var app = express();
var port = process.env.PORT || 3000;
var server = app.listen(port, function () {
console.log('Server is running!');
});
var express = require('express');
var http = require('http');
var app = express();
var port = process.env.PORT || 3000;
http.createServer(app).listen(port);
request objektum
response objektum
A middleware egy függvény, amely hozzáfér a
request)response)next)function (request, response, next) {
}
function (request, response, next) {
//tetszőleges kód
//request, response olvasása/írása
next();
}
//Általános formája
app.use([path], middleware [, middleware]);
//Minden útvonalra lefut
app.use(function (req, res, next) {
console.log('Middleware');
next();
});
//Minden '/users' résszel kezdődő útvonalra lefut
app.use('/users', function (req, res, next) { /*...*/ });
//Példa végpont
app.use(function (req, res, next) {
console.log('Végpont');
});
Middleware-ek sorozata végén végponttal:
middleware
middleware-->middleware
middleware
middleware
middleware-->végpont
Az adott URI végpontnak az útvonalkezelőhöz (vezérlő) való hozzárendelése.
Végpontok:
http://expressjs.com/guide/routing.html
http://localhost:8080/snippets/3
path)METHOD)handler)//Általánosan
app.METHOD(path, handler [, handler ...]);
app.METHOD(path [, middleware, ...] handler);
//Például
app.get('/alma', function (req, res) {
//kód
});
getpostputdeleteoptionsall//szöveg
app.get('/alma', function (req, res) { /* ... */ });
app.get('/public/index.html', function (req, res) { /* ... */ });
//szövegminta
app.get('/ab?cd', ...); //acd vagy abcd
app.get('/ab+cd', ...); //abcd, abbcd, abbbcd, ...
app.get('/ab*cd', ...); //abcd, ab1cd, abVALAMIcd
app.get('/ab(cd)?e', ...); //abe, abcde
//reguláris kifejezés
app.get(/alma/, ...); //alma
app.get(/.*alma$/, ...); //alma, szalma, pirosalma
next() hívás nélkül (folyamatvég)app.get('/', function (req, res) { /*...*/ });
app.get('/', function (req, res, next) {
console.log('middleware');
next();
}, function (req, res) {
console.log('vege');
})
app.get('/', middleware1, middleware2, middleware3);
app.get('/', [middleware1, middleware2, middleware3]);
//Alkalmazás szintű
app.use(...);
//Router szintű
var router = express.Router();
router.use(...)
//Végpont szintű middleware-ek
app.get('/alma', middleware1, middleware2, middleware3);
app.use('/alma', middleware1, middleware2, middleware3);
router.get('/alma', middleware1, middleware2, middleware3);
//hibakezelő
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Szerveroldali hiba!');
});
//plugin
app.use(express.static('public'));
app.use(cookieParser());
route() metódusapp.get ('/alma', function (req, res) { /*...*/ });
app.post('/alma', function (req, res) { /*...*/ });
app.put ('/alma', function (req, res) { /*...*/ });
//helyett
app.route('/alma')
.get (function (req, res) { /*...*/ })
.post(function (req, res) { /*...*/ })
.put (function (req, res) { /*...*/ });
//alma.js
//Definiálás
var express = require('express');
var router = express.Router();
// middleware csak ehhez a routerhez
router.use(function (req, res, next) { /*...*/ next(); });
// végpontok a routerhez
router.get('/', function(req, res) { /*...*/ });
router.get('/alma', function(req, res) { /*...*/ });
module.exports = router;
//Használat
var alma = require('./alma')
// /public és /public/alma
app.use('/public', alma);
req.pathreq.ipreq.get()req.paramsreq.bodyres.download(): fájl letöltésreres.end(): válasz végeres.json(): JSON válaszres.jsonp(): JSON válasz JSONP formátumbanres.redirect(): átirányításres.render(): nézetsablon megjelenítéseres.send(): különböző típusú válaszokres.sendFile(): fájl küldése<!DOCTYPE html>
<html>
<head>
<title>Oldalcím</title>
</head>
<body>
<h1>1. címsor</h1>
<p>Ez egy bekezdés</p>
<img src="alma.jpg">
<form>
<input type="text" name="nev"> <br>
<input type="submit">
</form>
</body>
</html>
p { color: #123456; }
p.info {
border: 1px dashed black;
background-color: orange;
}
#main { position: relative; }
nav ul > li { padding-top: 10px; }
npm install http-server -g
http-server
express.static(root [, options])app.use(express.static('public'));
app.set('views', './views');
app.set('view engine', 'hbs')
npm install hbs --save
layout.hbs
<!doctype html>
<html>
{{>head}} //partial betöltése
<body>
<div class="container">
{{{ body }}} //body is placed
</div>
</body>
</html>
Layout megváltoztatása:
//Per view
res.render('view', { title: 'my other page', layout: 'other' });
//Globális
app.set('view options', { layout: 'other' });
<!--
//--------------------------
-->
<h1>{{title}}</h1>
<h1>{{article.title}}</h1>
<!-- Nincs HTML escape-elés -->
{{{foo}}}
<div class="comments">
{{#each comments}}
<div class="comment">
<h2>{{subject}}</h2>
{{{body}}}
</div>
{{/each}}
</div>
{{#each paragraphs}}
<p>{{this}}</p>
{{else}}
<p class="empty">No content</p>
{{/each}}
{{#if isActive}}
<img src="star.gif" alt="Active">
{{else}}
<img src="cry.gif" alt="Inactive">
{{/if}}
{{#if isActive}}
<img src="star.gif" alt="Active">
{{else if isInactive}}
<img src="cry.gif" alt="Inactive">
{{/if}}
webprogramozas.inf.elte.hu HTTP kérését és válaszát a böngésződ webfejlesztő eszköztára segítségével!n. Fibonacci szám, illetve visszakapható az első n Fibonacci szám is!/secret útvonal esetén bővíti a kérésobjektumot egy titkos adattal, amit a válaszban visszaküldünk a kliensnek!/readme.txt útvonalra visszaad egy ilyen nevű fájlt!