Headers var bunlar metadata yanıta eklenen bilgiler browser ile ilgili bilgiler nasıl bir response olduğu falan basit basit gidelim sonra event driven code executionın teorik açıklamasını yapalım sonra diğer modüle geçelim
ana konu: Backend Geliştirme Serisi: Node.js, GraphQL API, REST API, MongoDB, SQL, & Deno.js serisi #1
Böyle böyle istek atınca bunları alabiliyoruz misal…
RESPONSES
Express.js kütüphanesini ilerde kullanarak çok daha kolay şekilde yapacağız tabii bunları ilerde…
ROUTES
mesela kullanıcı / gittiğinde farklı /message adresine gittiğinde farklı sonuçlar
req.url yi url’ye atayıp eğer url / ise şunu yap değilse şunu yap tarzında şeyler yapabiliyoruz html’den de faydalanarak.
REDIRECTING REQUESTS
Bir if koşulu daha ekledik eğer /message olursa url ve metod da post metoduysa yani post isteği varsa ve url /message ise message.txt dosyasını oluştur içinde ‘DUMMY’ yazacak.
PARSING REQUEST BODIES
Nodejs in çok kullandığı şey de streams & buffers konsepti
Node istekleri bu şekilde işler çünkü hangi isteğin ne kadar büyük olduğunu bilmiyoruz. Belki birinde büyük bir dosya yüklenecek vs.
Bu parçalarla çalışabilmek için Bufferları kullanıyoruz. Buffer bir otobüs gibidir tıpkı şehir içi otobüslerde bir sürü durak olur müşterilerin indi bindi yapması gerekir aynı şekilde buffer bunu sağlar bize. Çoklu chunklarla çalışmamıza imkan sağlar yani.
Req.on diyerek data eventini dinliyoruz ve her data eventinde tetiklenecek bir fonksiyon yazmamız gerekiyor her bir data parçacığına chunk diyoruz ardından bu chunkları içerecek olan body listesine ekletiyoruz. Ardından req.on(‘end’ diyoruz yani end eventi çalıştığında tetiklenecek fonksiyonu yazıyoruz Buffer.concat(body) dediğimizde yeni bir buffer oluşturur ve body’i (body tüm chunkları içeriyor). Ardından message diyerek parsedBody’i splitliyoruz ve bunu içerecek bir message.txt dosyası oluşturtuyoruz.
Aslında bu kadar karışık değil Express js i kullanmadan raw logic takıldığımız için öyle karmaşık geliyor olabilir şu an ama anlamak adına bu önemliydi.
EVENT DRIVEN CODE EXECUTION
Son olarak kodlarımızı router oluşturup bu şekilde parçalara ayırarak çalışabiliyoruz:
app.js
router.js
okumanız gereken
devam ettikçe aynı şeyleri kullanacağımız için daha detaylı açıklamalara geçeceğim.
haftaya gelecek olan modülün içeriği
modül 4 içerik:
npm scriptlerini anlamak
3.taraf paketler
nodemonu kullanmak
global ve local npm paketleri
farklı hata türleri
syntax hatalarını bulup çözmek
runtime hatalarını çözmek
mantıksal hatalar
debuggerı kullanmak
debug console
ana konu: Backend Geliştirme Serisi: Node.js, GraphQL API, REST API, MongoDB, SQL, & Deno.js serisi #1
Böyle böyle istek atınca bunları alabiliyoruz misal…
RESPONSES
Express.js kütüphanesini ilerde kullanarak çok daha kolay şekilde yapacağız tabii bunları ilerde…
ROUTES
mesela kullanıcı / gittiğinde farklı /message adresine gittiğinde farklı sonuçlar
req.url yi url’ye atayıp eğer url / ise şunu yap değilse şunu yap tarzında şeyler yapabiliyoruz html’den de faydalanarak.
REDIRECTING REQUESTS
Bir if koşulu daha ekledik eğer /message olursa url ve metod da post metoduysa yani post isteği varsa ve url /message ise message.txt dosyasını oluştur içinde ‘DUMMY’ yazacak.
PARSING REQUEST BODIES
Nodejs in çok kullandığı şey de streams & buffers konsepti
Node istekleri bu şekilde işler çünkü hangi isteğin ne kadar büyük olduğunu bilmiyoruz. Belki birinde büyük bir dosya yüklenecek vs.
Bu parçalarla çalışabilmek için Bufferları kullanıyoruz. Buffer bir otobüs gibidir tıpkı şehir içi otobüslerde bir sürü durak olur müşterilerin indi bindi yapması gerekir aynı şekilde buffer bunu sağlar bize. Çoklu chunklarla çalışmamıza imkan sağlar yani.
Req.on diyerek data eventini dinliyoruz ve her data eventinde tetiklenecek bir fonksiyon yazmamız gerekiyor her bir data parçacığına chunk diyoruz ardından bu chunkları içerecek olan body listesine ekletiyoruz. Ardından req.on(‘end’ diyoruz yani end eventi çalıştığında tetiklenecek fonksiyonu yazıyoruz Buffer.concat(body) dediğimizde yeni bir buffer oluşturur ve body’i (body tüm chunkları içeriyor). Ardından message diyerek parsedBody’i splitliyoruz ve bunu içerecek bir message.txt dosyası oluşturtuyoruz.
Aslında bu kadar karışık değil Express js i kullanmadan raw logic takıldığımız için öyle karmaşık geliyor olabilir şu an ama anlamak adına bu önemliydi.
EVENT DRIVEN CODE EXECUTION
Son olarak kodlarımızı router oluşturup bu şekilde parçalara ayırarak çalışabiliyoruz:
app.js
Kod:
const http = require('http');
const routes = require('./routes');
console.log(routes.someText);
const server = http.createServer(routes.handler);
server.listen(3000);
router.js
Kod:
const fs = require('fs');
const requestHandler = (req, res) => {
const url = req.url;
const method = req.method;
if (url === '/') {
//eger url sadece / ise
res.write('<html>');
res.write('<head><title>Enter Message</title><head>');
res.write('<body><form action="/message" method="POST"><input type="text" name="message"><button type="submit">Send</button></form></body>');
res.write('</html>'); //böyle bir şeyler yazdırabiliyoruz response a html kodumuzu bu şekilde misal veriyoruz
return res.end();
}
if (url === '/message' && method === 'POST'){
//eger bir post istegi varsa ve /message ise url
const body = [];
//bazı eventleri dinlememizi sağlar data eventini dinleyeceğimizi söyledik req.on 'data' diyerek
req.on('data', (chunk)=>{
//her data eventinde tetiklenecek bir fonk.
body.push(chunk);
});
//dinleme bittiginde
req.on('end', ()=>{
const parsedBody = Buffer.concat(body).toString(); //yeni bir buffer oluşturacak ve bütün datayi (chunkların hepsini)
//parsedBody e aktaracak toString leyip
const message = parsedBody.split('=')[1]; //splitliyoruz
fs.writeFile('message.txt', message, (err)=> {
}); //artik o message da ne varsa message.txt in icinde olacak
});
}
res.setHeader('Content-Type', 'text/html'); //response'a bir meta infosu ekleyecek content type ın html olduğunu belirten
res.write('<html>');
res.write('<head><title>My First Page</title><head>');
res.write('<body><h1>hello from node.js server!</h1></body>');
res.write('</html>'); //böyle bir şeyler yazdırabiliyoruz response a html kodumuzu bu şekilde misal veriyoruz
res.end();
};
// module.exports = { //böyle de yapılabilir
// handler: requestHandler,
// someText: 'some hard coded text'
// };
// module.exports.handler = requestHandler; //böyle de yapılabilir
// module.exports.someText = 'some hard coded text falan';
exports.handler = requestHandler; //böyle de yapılır bir öncekinin kısaltması
exports.someText = 'some hard coded text falan';
okumanız gereken
Asenkron Nedir ?
Facebook ve Twitter’ın yükselişi ile birlikte, özellikle sosyal ağlarda anlık veri akışına alışır duruma geldik. Bildirimleri veya bize gelen mesajları görüntülemek için sayfayı yenileme işlemi geçmişte kalmış eski bir anı oldu. Peki, bu altyapıyı kullanan web siteleri bu gücü nereden alıyor...
www.turkhackteam.org
devam ettikçe aynı şeyleri kullanacağımız için daha detaylı açıklamalara geçeceğim.
haftaya gelecek olan modülün içeriği
modül 4 içerik:
npm scriptlerini anlamak
3.taraf paketler
nodemonu kullanmak
global ve local npm paketleri
farklı hata türleri
syntax hatalarını bulup çözmek
runtime hatalarını çözmek
mantıksal hatalar
debuggerı kullanmak
debug console