Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/serifcolakel/nodejs
https://github.com/serifcolakel/nodejs
Last synced: 6 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/serifcolakel/nodejs
- Owner: serifcolakel
- Created: 2022-03-09T13:25:57.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-10T20:59:35.000Z (almost 3 years ago)
- Last Synced: 2024-11-09T02:52:36.560Z (2 months ago)
- Language: JavaScript
- Size: 109 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NODE-JS NOTLARI
- jshint app.js ile app.js içerisindeki javascript hatalarını gözlemleyebiliriz.
### Moduller
- Her değişken tanımlandığı .js sayfası içerisinde global olarak tanımlanmaz.Bu yüzden değişkenlere farklı yerlerden ulaşılması halinde modüller altında global değişken haline getirilip kullanılabilir.
- Aşağıdaki kod parçacığı ile .js sayfası modül haline getirilebilir ve dışarıya aktarılabilir.```javascript
var url = "URL";function log(message) {
//Send an HTTP request
console.log(message);
}//fonksiyon log olarak kullanılabilir.
module.exports.log = log;
//url endPoint olarak kullanılabilir.
module.exports.endPoint = url;
```- Dosya sistemi(fs), Her zaman asenkron olarak kullanılmalıdır. https://nodejs.org/dist/latest-v17.x/docs/api/fs.html adresinden gerekli metodlar kullanılabilir.
- Events Modulü(https://nodejs.org/dist/latest-v17.x/docs/api/events.html , events)
- HTTP Modülü(https://nodejs.org/dist/latest-v17.x/docs/api/http.html ) Birden fazla veri eklemek için kod satırı fazla olacağından dolayı Express kullanılarak bu sorun ortadan kaldırılmış olur.```javascript
const http = require("http");const server = http.createServer((req, res) = {
//http://localhost:3000 adresine string olarak veri yazdı
if (req.url === "/") {
res.write("Hello World");
res.end();
}
//http://localhost:3000/api/courses adresine JSON formatinda veri yazdı
if (req.url === "/api/courses") {
res.write(JSON.stringify([1, 2, 3]));
res.end();
}
}); //EventEmitter'dirserver.listen(3000);
console.log("listening on port 3000");
```
- **NPM**
- package.json => npm init yazıp tüm şartları kabul et ve package.json’ı oluştur
- Using a Package => npm i package ile kur ve doküman okuyarak import edebilirsin.
- https://underscorejs.org/ ile JS metod, fonks. Vs kullanılabilir.
- npm i ile package.json içeresinde önceden kurulan paketleri otomatik kurabilirsin.
- git init ile git’e hazır hale getirilir .gitignore ile de yüklenmemesini istediğimiz dosyaları gizleyebiliriz.
- Sürüm 4. 1.2 => anasürüm(major).Küçüksürüm(minor).yamaversiyonu(patch) şeklinde kodlanır.Hata bulunmazsa 4.0.0 olabilir.# **REST(Representational State Transfer) Full Services**
- Verilerin güvenli bir kanalda değiş tokuş edilmesi için https kullan
- https://vidly.com/api/customers bir end-point örneği### **HTTP methods**
- **GET(Read)** Verileri Getirmek için
```javascript
app.get("/api/posts/:year/:month", (req, res) => {
res.send(req.params); // request içerisinde gelen ay ve yıl verilerini yolladık
res.send(req.query); // query objeleri gösterildi
});
app.get("/api/courses/:id", (req, res) => {
// sorgu adında kurs varsa kursu gönderecek JSON formatında yoksa status ile 404 ve hata mesajı gönderecek
const course = courses.find((c) => c.id === parseInt(req.params.id));
if (!course)
return res.status(404).send("The Course with the given ID was not found.");
res.send(course);
});
```- **POST(Create)** Veri iletmek için
```javascript
app.post("/api/courses", (req, res) => {
// const schema = {
// name: Joi.string().min(3).required(),
// };
// const result = Joi.validate(req.body, schema);
// // console.log(result); //postmanda görünteleniyor
// // name yoksa veya boyutu 3'den az ise
// if (result.error) {
// // Status: 400 Bad Request
// res.status(400).send(result.error);
// // res.status(400).send(result.error.details[0].message); //sadece mesaj gösterilecek
// return; // fonksiyonu sonladırdık
// }
//YADA AŞAĞIDAKİ GİBİ KULLANILABİLİR
const { error } = validateCourse(req.body); // result.error destruc.
if (error) {
return res.status(400).send(error.details[0].message); //sadece mesaj gösterilecek
}const course = {
id: courses.length + 1, // id sayısını veri sayısının 1 fazlası olarak ayarladık
name: req.body.name, // isteğin body'sinde bulunan adı
};
courses.push(course); // course'yi courses'e atıyoruz
res.send(course); // yanıtı gövdeye dönderiyoruz.
});
```- **PUT(Update/Replace)** Veri eklemek/düzenlemek için
```javascript
//Kaynakları güncellemek için put Kullanıyoruz.
app.put("/api/courses/:id", (req, res) => {
// (if) Kursa bakmamız lazım ve yoksa 404 döndermeliyiz
const course = courses.find((c) => c.id === parseInt(req.params.id));
if (!course) {
res.status(404).send("The Course with the given ID was not found.");
}// (else if) doğrulama yapılmalı ve doğrulama geçersizse 400 döndermeliyiz.
// const result = validateCourse(req.body);
const { error } = validateCourse(req.body); // result.error destruc.
if (error) {
return res.status(400).send(error.details[0].message); //sadece mesaj gösterilecek
}
// (else if) update course return the updated course
course.name = req.body.name;
res.send(course);
});function validateCourse(course) {
const schema = {
name: Joi.string().min(3).required(),
};
return Joi.validate(course, schema);
}
```- **DELETE(Delete)** Verileri Silmek için
```javascript
app.delete("/api/courses/:id", (req, res) => {
// (if) Kursa bakmamız lazım ve yoksa 404 döndermeliyiz
const course = courses.find((c) => c.id === parseInt(req.params.id));
if (!course) {
return res.status(404).send("The Course with the given ID was not found.");
}
// Silme işlemi
const index = courses.indexOf(course);
courses.splice(index, 1); //gelen course objesini siliyoruz
// return the same course
res.send(course);
});
```# **EXPRESS**
- **npm i express** ile kurulur.
- **npm i -g nodemon** ile global olarak kullanılarak yenileyen modul import edilmiş olur
- **In Command Prompt: set PORT=5000**
- **Power Shell'de: $env:PORT=5000**
- **Bash'te (Windows): export PORT=5000** ile PORT değeri 5000 olarak ayarlanır.
- **http://localhost:3000/api/posts/2018/7?sortBy=name** sortBy ile sıralanabilir.# **JOI**
- **https://www.npmjs.com/package/joi**
- **npm i joi** ile joi indirilebilir.
- ilk olarak şema tanımlanır.
- Sonrasında ise gönderilecek elemana ait özellikler şemaya içerisinde joi kullanılarak belirtilir.```javascript
app.post("/api/courses", (req, res) => {
const schema = {
name: Joi.string().min(3).required(),
};
const result = Joi.validate(req.body, schema);
// console.log(result); //postmanda görünteleniyor
// name yoksa veya boyutu 3'den az ise
if (result.error) {
// Status: 400 Bad Reques
res.status(400).send(result.error);
// res.status(400).send(result.error.details[0].message); //sadece mesaj gösterilecek
return; // fonksiyonu sonladırdık
}
});
```# **Creating Custom Middleware Declare (Özel Ara Yazılım Oluşturma)**
- logger.js dosyası içinde export edildi
```javascript
function log(req, res, next) {
console.log("Authenticating..");
// Geçmek için kimlik doğrulama vb adımı uygulanabilir.
next();
}module.exports = log;
```- index.js içerisinde kullanıldı
```javascript
const logger = require("./logger"); // çağrıldı//Diğer bir örnek
app.use(function (req, res, next) {
console.log("logging...");
next(); //isteği sonlandırıyoruz.sonlandırmada denediğimizde yanıt alamıyoruz
// Kısaca özetlersek istek burada sıkışıyor biz next ile bu işlem adımları
// gerçekleştirildikten sonra fonksiyonu sonlandırıyoruz.
// Geçmek için kimlik doğrulama vb adımı uygulanabilir.
});app.use(logger); // kullanıldı
```# **Hata Ayıklama(Debugging)**
> - **npm i debug**
```javascript
const startupDebugger = require("debug")("app:startup");
const dbDebugger = require("debug")("app:db");//Hata Ayıklama işlemi 2 türde yapılabilir şartlı yada
if (app.get("env") === "development") {
startupDebugger("Morgan Enabled...");
}
//şartsız olarak işlemleri gerçekleştirilir.
dbDebugger("Contected to the database...");
//$env:DEBUG="app:startup" ile startup tagı verilen debug çalışırken $env:DEBUG="app:*" ile de tüm hata ayıklama kodları ayrı ayır çalışır
```- Genelde debug işlemi için console.log() kullanılır :smiley:
- **Debugging Ekran Görüntüsü**> ![alt text](https://i.hizliresim.com/ddwhxfj.jpg)
# **Templating Engines (Pug - Mustache - EJS )**
> - npm i pug
```javascript
//Templating Engine
app.set("view engine", "pug"); // pug modülünü import etti
app.set("views", "./views"); // all template dosyası içerisinde
```## **Index.pug dosyasının konumu**
> ![index.pug](https://i.hizliresim.com/r2a2ohn.jpg)
```javascript
//Templating Engines eklendi
app.get("/", (req, res) => {
// ilk parametresi dosyadı adı(index.pug) ikincisi object index.pug da tanımlanan parametrelere göre eklenebilir
res.render("index", {
title: "My Express App",
message: "Hi I'm Beginner on NodeJS",
});
});
```## **The File System(Creating, Deleting, Reading files etc )**
> - import data package on top level of index.js
```javascript
const fs = require("fs");
```> - readFile ile dosya okunur, ilk parametre dosya yolu, ikinci parametre callback fonksiyonu
```javascript
//reading files
fs.readFile("./readme.txt", "utf-8", (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data.toString());
}
});
```> - writeFile ile dosya yazılır, ilk parametre dosya yolu, ikinci parametre dosya içeriği, üçüncü parametre callback fonksiyonu
```javascript
// writing files --> if file not exist it will create it\*
fs.writeFile("./readme.txt", "Hello World", (err) => {
if (err) {
console.log(err);
} else {
console.log("File created");
}
});
```> - dosya oluşturmak için mkdir ile yapılır, ilk parametre yol, ikinci parametre option, üçüncü parametre callback fonksiyonu
```javascript
// directories --> take arg : (path, options, callback);
// existsSync --> take arg : (path) --> true or false --> true if file or directory exists
if (!fs.existsSync("./assets")) {
fs.mkdir("./assets", { recursive: true }, (err) => {
if (err) {
console.log(err);
} else {
console.log("Directory created");
}
});
} else {
// take arg : (path, options, callback) --> recursive : true -> if directory exist it will delete it
fs.rmdir("./assets", { recursive: true }, (err) => {
if (err) {
console.log(err);
} else {
console.log("Directory deleted");
}
});
}
```> - unlink ile dosya silinir, ilk parametre dosya yolu, ikinci parametre callback fonksiyonu
```javascript
//delete files --> take arg : (path, options, callback)
if (!fs.existsSync("./assets/readme.txt")) {
fs.unlink("./assets/readme.txt", (err) => {
if (err) {
console.log(err);
} else {
console.log("File deleted");
}
});
}
```