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év
npm
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 --save
npm 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
});
get
post
put
delete
options
all
//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.path
req.ip
req.get()
req.params
req.body
res.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!