Express PlatoBlockchain Veri İstihbaratında İstisna İşleme Kılavuzu. Dikey Arama. Ai.

Express'te İstisna İşleme Kılavuzu

Giriş

İstisnalar ve hatalar, kullanıcılar herhangi bir uygulamayla etkileşim kurarken meydana gelebilir, bilerek veya bilmeyerek ortaya çıkabilecek herhangi bir hatayı işlemek için bir yol seçmek yazılım mühendislerine kalmıştır. Sonuç olarak, Express ile API'ler oluşturan arka uç geliştiriciler kendilerini faydalı, verimli ve kullanılabilir bir API oluşturduklarından emin olmak için çalışırken bulurlar. En önemlisi, hataları sağlam bir sistem oluşturacak şekilde ele almaktır çünkü bu, geliştirme süresini, doğrudan hataları, üretkenlik sorunlarını azaltmaya yardımcı olur ve yazılım geliştirmenin başarısını veya ölçeklenebilirliğini belirler.

Hata mesajını günlüğe kaydetmeniz, hatayı bastırmanız, kullanıcıları hata hakkında bilgilendirmeniz veya hataları işlemek için kod yazmanız mı gerekiyor? daha fazla merak etme.

Bu kılavuzda, Express uygulamaları için, uygulama hatalarını tespit etmeye ve herhangi bir uygulamayı çalışma süresi sırasında incelikle başarısız olmaktan kurtarmak için en uygun eylemleri almaya yardımcı olacak sağlam bir hata işleme kod tabanının nasıl oluşturulacağını öğreneceğiz.

Not: Demomuzda API'yi test etmek için Postman'ı kullanacağız. adresinden indirebilirsiniz Postacı İndirme sayfası. Alternatif olarak, tarayıcıyı, komut satırını da kullanabilirsiniz. curl araç veya aşina olabileceğiniz başka bir araç.

Hata İşleme Nedir?

Yazılım geliştirmede iki farklı istisna türü vardır: işletme ve program niteliğinde.

  • Çalıştırma sırasında operasyonel hatalar ortaya çıkabilir ve uygulamanın aniden sona ermesini önlemek için, bu istisnaları verimli hata işleme yöntemleriyle zarif bir şekilde ele almalıyız.
  • Programatik istisnalar, istisnai bir durum ortaya çıktığında bir programcı tarafından manuel olarak atılır.

Operasyonel istisnaları "beklenmeyen ancak öngörülen" istisnalar (bir dizine sınırların dışında erişim gibi) ve programatik istisnaları "beklenen ve öngörülen" istisnalar (sayı biçimlendirme istisnası gibi) olarak düşünebilirsiniz.

İstisna işleme, bir programdaki kusurları bulmak ve düzeltmek için kullanılan prosedürdür. Hata işleme, meydana gelen hatanın türünü ve hatanın meydana geldiği yığını içeren mesajlar gönderir.

Not: Bilgisayar biliminde, istisnalar kurtarılabilir ve genellikle çalıştırma sırasındaki operasyonel veya programatik sorunlardan kaynaklanır. Hatalar genellikle donanım sınırlamaları, bağlantı sorunları, bellek yetersizliği vb. gibi dış etkenlerden kaynaklanır. JavaScript'te, terimler çoğu zaman birbirinin yerine kullanılır ve özel istisnalar Error sınıf. Error sınıfın kendisi hem hataları hem de istisnaları temsil eder.

Express'te istisna işleme, Express'in eşzamanlı ve eşzamansız istisnaları yakalamak ve işlemek için kendisini nasıl ayarladığını ifade eder. Express'te istisna işlemenin iyi yanı, bir geliştirici olarak kendi istisna işleyicilerinizi yazmanıza gerek olmamasıdır; Express, varsayılan bir istisna işleyici ile birlikte gelir. İstisna işleyici, hataları belirlemeye ve bunları kullanıcıya bildirmeye yardımcı olur. Ayrıca çeşitli düzeltme stratejileri sağlar ve bunları istisnaları azaltmak için uygular.

Bunlar, gizliden gizliye giden pek çok şey gibi görünse de, Express'te istisna işleme, bir programın genel sürecini yavaşlatmaz veya yürütülmesini duraklatmaz.

Express'te İstisna İşlemeyi Anlamak

Express ile birlikte gelen varsayılan hata işleyici ile, rota işleyicilerindeki hataları otomatik olarak yakalamaya yardımcı olan bir dizi ara yazılım işlevine sahibiz. Yakında, bir Express uygulamasında uygun hataların nasıl döndürüleceği ve hassas bilgilerin nasıl sızdırılmayacağı konusunda teoriyi uygulamaya koyacak bir proje oluşturacağız.

Express'te ara yazılım işlevini tanımlama

Hata işleyen ara katman işlevleri, bir hata kabul edecek şekilde tanımlanır. Error ilk giriş parametresi olarak nesne, ardından başka herhangi bir ara yazılım işlevinin varsayılan parametreleri gelir: request, response, ve next. next() işlevi, geçerli tüm ara yazılımları yönlendirici için bir sonraki hata işleyiciye atlar.

Express'te Hata İşleme Kurulumu

Bir Düğüm ve Ekspres uygulaması oluşturmak için terminalinizde aşağıdaki komutu çalıştırın:

$ mkdir error-handling-express

Yeni oluşturulan klasörde yeni bir Düğüm projesi başlatalım:

$ cd error-handling-express && npm init -y

Bu bir oluşturur package.json dosyamız klasörümüzde.

Düğüm uygulamamızda bir Ekspres sunucu oluşturmak için, express paket, dotenv ortam değişkenlerini otomatik olarak yüklemek için .env içine dosyalamak process.env nesne ve nodemon dizinde bir dosya değişikliği not edilirse düğüm uygulamasını yeniden başlatmak için.

$ npm install express dotenv nodemon

Ardından, bir app.js Uygulama için dizin dosyası olarak hizmet verecek olan proje klasöründeki dosya.

Express uygulamamız için gerekli tüm bağımlılıkları yüklediğimize göre, uygulamayı okumak için betiği kurmamız gerekiyor. package.json dosya. Bunu başarmak için, package.json dosya, böylece scripts nesne aşağıda gösterildiği gibidir:

"scripts": {
    "start": "nodemon app.js"
},

Alternatif olarak, kullanarak atlayabilirsiniz. nodemon, ve kullan node app.js yerine.

Ekspres sunucu kurma

Sunucuyu kurmak için önce çeşitli paketleri içe aktarmamız gerekir. app.js. Biz de oluşturacağız .env proje dizinindeki dosya - uygulama için tüm ortam değişkenlerini depolamak için:



const express = require('express')
require('dotenv').config

PORT=4000 

Uygulama için bağlantı noktası numarasını şurada tanımladık: .envtarafından yüklenen ve okunan dotenvve daha sonra erişilebilir.

Ekspres Sunucuyu Başlatma

Şimdi, Ekspres sunucuyu başlatmamız ve uygulamamızın, bir test rotası talebiyle birlikte uygulama bağlantı noktası numarasını dinlemesini sağlamamız gerekiyor – /test. güncelleyelim app.js, içe aktarma ifadelerinin altında:


const app = express();
const port = process.env.PORT || 4000;

app.get("/test", async (req, res) => {
    return res.status(200).json({ success: true });
});

app.listen(port, () => {
    console.log(`Server is running at port ${port}`);
});

Bundan sonra, Express'te karşılaşılabilecek operasyonel hataların çeşitli kullanım durumlarını nasıl ele alacağımızı öğreneceğiz.

Express'te Bulunamayan Hataları İşleme

Bir kullanıcı veri tabanından tüm kullanıcıları getirmeniz gerektiğini varsayalım, veritabanında hiçbir verinin bulunmadığı olası bir hata senaryosunu, mantığı bir try/catch blok - projede yansıtılabilecek herhangi bir hatayı yakalamayı umarak catch blok:


const getUser = () => undefined;

app.get("/get-user", async (req, res) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error('User not found');
		}
	} catch (error) {
	    
		console.log(error); 
		
		res.status(400).send(error.message) 
	}
	return res.status(200).json({
		success: true
	});
});

Bunun sonucu:

User not found

Artık bu istek yapıldığında (Postman kullanarak test edebilirsiniz) ve veritabanında kullanıcı bulunmadığında client “User not found” (Kullanıcı bulunamadı) şeklinde bir hata mesajı alıyor. Ayrıca, hatanın konsolda da günlüğe kaydedildiğini fark edeceksiniz.

Error Handler Middleware ile Hata İşlemeyi Optimize Etme

Tanımlanan tüm yolların sonunda gelecek bir hata işleyici ara yazılımı oluşturarak geliştirmeyi optimize edebiliriz, böylece yollardan birinde bir hata atılırsa, Express otomatik olarak bir sonraki ara katman yazılımına bakar ve listede aşağı doğru ilerlemeye devam eder. hata işleyicisine ulaşana kadar. Hata işleyici hatayı işleyecek ve ayrıca istemciye bir yanıt gönderecektir.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Başlamak için adlı bir klasör oluşturun. middleware proje dizininde ve bu klasörde, adlı bir dosya oluşturun. errorHandler.js hata işleyiciyi tanımlayan:

const errorHandler = (error, req, res, next) => {
    
    console.log(error); 
    
    res.status(400).send(error.message); 
}
module.exports = errorHandler;

Ara katman işlevimizde, Express'in bunun temel bir ara yazılım işlevi değil, bir hata işleyici olduğunu fark etmesini sağladık. error 3 temel parametreden önce parametre.

Şimdi, demomuzda hata işleyiciyi kullanacağız app.js ve aşağıda gösterildiği gibi, hata işleyici ara yazılımıyla kullanıcıları getirmenin ilk hatasını işleyin:


const getUser = () => undefined;

app.get("/get-user", async (req, res, next) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
	} catch (error) {
		return next(error);
	}
});

app.use(errorHandler);

etrafında bir soyutlama oluşturarak kodumuzu daha da optimize edebiliriz. try/catch mantık. Bunu, proje dizininde adlı yeni bir klasör oluşturarak başarabiliriz. utilsve içinde adlı bir dosya oluşturun. tryCatch.js.

soyutlamak için try-catch mantık - başka bir işlevi kabul eden bir işlev tanımlayabiliriz (olarak bilinir kontrolör) parametresi olarak ve bir döndürür async tutacak bir fonksiyon try/catch alınan herhangi bir denetleyici için.

Denetleyicide bir hata oluşursa, catch blok ve sonraki işlev çağrılır:


const tryCatch = (controller) => async (req, res, next) => {
	try {
		await controller(req, res);
	} catch (error) {
		return next(error);
	}
};
module.exports = tryCatch;

İle try/catch soyutlama, atlayarak daha kısa ve öz hale getirmek için kodumuzu yeniden düzenleyebiliriz. try-catch yan tümcesi, kullanıcıları getirirken açıkça app.js:


const getUser = () => undefined;

app.get(
	"/get-user",
	tryCatch(async (req, res) => {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
		res.status(400).send(error.message);
	})
);

Try-catch mantığını başarılı bir şekilde soyutladık ve kodumuz hala eskisi gibi çalışıyor.

Express'te Doğrulama Hatalarını İşleme

Bu demo için, oturum açma sırasında bir kullanıcı kimliğini doğrulamak için Express uygulamamızda yeni bir rota oluşturacağız. joi paketi, gereksinimleri uygulayabileceğimiz bir şema oluşturmaya yardımcı olmak için:

$ npm i joi

Sonra, olan bir şema oluşturun Joi.object Birlikte userId bu bir sayı olmalı ve gereklidir - yani istek, üzerinde kullanıcı kimliği bulunan bir nesneyle eşleşmelidir.

Biz kullanabilirsiniz validate() şemaya göre her girişi doğrulamak için şema nesnesindeki yöntem:


const schema = Joi.object({
	userId: Joi.number().required(),
});

app.post(
	"/login",
	tryCatch(async (req, res) => {
		const {error, value} = schema.validate({});
		if (error) throw error;
	})
);

içine boş bir nesne geçirilirse validate() yöntemi, hata incelikli bir şekilde işlenir ve hata mesajı istemciye gönderilir:

Konsolda ayrıca bir details Gerektiğinde kullanıcıya iletilebilecek hatayla ilgili çeşitli ayrıntıları içeren dizi.

Doğrulama hatalarını, doğrulama hatası başına uygun hata ayrıntısını iletecek şekilde özel olarak işlemek için, hata işleyici ara yazılımı yeniden düzenlenebilir:


const errorHandler = (error, req, res, next) => {
	console.log(error); 

	if (error.name === "ValidationError") {
		return res.status(400).send({
			type: "ValidationError",
			details: error.details,
		});
	}

	res.status(400).send(error.message); 
};

module.exports = errorHandler;

İle errorHandler.js artık özelleştirilmiş, aynı isteği boş bir nesne ile yaptığımızda validate() yöntem:

Express PlatoBlockchain Veri İstihbaratında İstisna İşleme Kılavuzu. Dikey Arama. Ai.

Artık mesajları daha okunabilir/dostça döndüren özelleştirilmiş bir nesneye erişimimiz var. Bu şekilde, gelen hatanın türüne göre farklı türde hatalar gönderip işleyebiliyoruz.

Sonuç

Bu kılavuzda, eşzamanlı ve eşzamansız kodun varsayılan olarak nasıl işlendiği, kendi hata sınıflarınızı nasıl oluşturacağınız, özel hata işleme ara yazılımı işlevlerinin nasıl yazılacağı ve nasıl sağlanacağı dahil olmak üzere Express.js'nin hata işlemesinin her yönünü inceledik. next son yakalama işleyicisi olarak

Dışarıdaki her görevde olduğu gibi, geliştirme sırasında etkili hata işlemeyi içeren en iyi uygulamalar da vardır ve bugün bir Express uygulamasındaki hataları sağlam bir şekilde nasıl ele alabileceğimizi öğrendik.

Hataları düzgün bir şekilde ele almak, yalnızca hataları kolayca bularak geliştirme süresini kısaltmak değil, aynı zamanda büyük ölçekli uygulamalar için sağlam bir kod tabanı geliştirmek anlamına gelir. Bu kılavuzda, operasyonel hataları işlemek için ara yazılımın nasıl kurulacağını gördük. Hata işlemeyi iyileştirmenin diğer bazı yolları şunları içerir: yığın izlemeleri göndermemek, yakalanmayan istisnaları işlemek için işlemleri zarif bir şekilde durdurmak, uygun hata mesajları sağlamak, hata günlükleri göndermek ve Error sınıf.

Umarım bu eğitimde kullandığım örnekler sizin için eğlenceli olmuştur. Hata yönetimi hakkında gerçek dünyada kullanmak için bir Ekspres uygulama yazarken potansiyel olarak karşılaşabileceğiniz çeşitli senaryoları ele aldım. Lütfen, atladığım bir şey varsa bana bildirin. Bize fayda sağlayacak ve daha fazlasını öğrenmeme de yardımcı olacak. İyi günler ve okuduğunuz için teşekkürler.

Makalede kullanılan tüm kaynak kodlarına şu adresten başvurabilirsiniz: Github.

Ek kaynaklar

Zaman Damgası:

Den fazla Yığın kötüye kullanımı